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?”足够? –