0
我正在嘗試使用Rails 4製作應用程序。Rails 4 - 評論者和協會
我正在使用設計師。
我正在嘗試在Pundit中編寫一個地址策略。
我有三個相關的模型,分別是user.rb,profile.rb和address.rb。
的關聯是:
user.rb
has_one :profile
profile.rb
belongs_to :user
has_many :addresses, as: :addressable
address.rb
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
我很困難如何找出寫這個政策的方法。地址是多態的。配置文件可以有許多地址,並且配置文件屬於用戶。因此,對於我希望擁有配置文件的用戶創建和更新地址的策略。我很掙扎,因爲我無法弄清楚如何將配置文件放入用戶和地址之間的關聯鏈中。
此策略的當前錯誤方法從創建開始?功能:
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
任何人都可以看到如何做到這一點?
嗨 - 感謝Plamena。這工作,這是什麼(address.id)在這最後做什麼? – Mel
爲什麼這個工作在創建操作?用戶添加新地址時沒有地址? – Mel
嗨。該方法「存在嗎?」需要一個ID或條件 - 這裏是文檔:http://apidock.com/rails/ActiveRecord/FinderMethods/exists%3F。您可以使用它來僅允許地址的所有者對其進行編輯。什麼是創建地址的限制 - 不是「user.present?」足夠? –