Я пытаюсь сделать приложение с Rails 4.
Я использую pundit с devise.
Я пытаюсь написать политику адресов в Pundit.
У меня есть три соответствующие модели: user.rb, profile.rb и address.rb.
Ассоциации таковы:
пользователь.rb
has_one :profile
профиль.rb
belongs_to :user
has_many :addresses, as: :addressable
адрес.рб
belongs_to :addressable, :polymorphic => true
Моя адресная политика:
class AddressPolicy < ApplicationPolicy
def create?
user.present? && user == address.profile.user
end
def update?
user.present? && user == address.profile.user
end
def destroy?
user.admin?
end
private
def address
record
end
end
У меня возникли проблемы, как выяснить, как написать эту политику. Адрес полиморфен. Профиль может иметь много адресов и профиль принадлежит пользователю. Итак, для политики я хочу, чтобы пользователь, которому принадлежит профиль, создавал и обновлял адреса. Я борюсь, потому что не могу понять, как поместить профиль в цепочку ассоциаций, чтобы связать пользователя и адрес.
Текущий метод ошибки с этой политикой начинается с create? функция:
def create?
user.present? && user == address.profile.user
end
Сообщение:
undefined method `profile' for #<Address:0x007fbad7ac0cf8>
Моя адресная политика наследуется от моей политики приложений, которая инициализирует пользователя и запись:
class ApplicationPolicy
attr_reader :user, :record
def initialize(user, record)
@user = user
@record = record
end
Кто-нибудь может увидеть, как это сделать?