Rails 4 - 专家和协会
Rails 4 - Pundit and Associations
我正在尝试用 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
我不知道如何写这个政策。地址是多态的。配置文件可以有多个地址,一个配置文件属于一个用户。因此,对于该策略,我希望拥有配置文件的用户创建和更新地址。我正在苦苦挣扎,因为我无法弄清楚如何将个人资料放入关联链中,以在用户和地址之间 link。
此策略的当前错误方法从创建开始?功能:
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
谁能知道怎么做?
您可以检查用户的地址是否包含地址:
user && user.profile.addresses.exists?(address.id)
我正在尝试用 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
我不知道如何写这个政策。地址是多态的。配置文件可以有多个地址,一个配置文件属于一个用户。因此,对于该策略,我希望拥有配置文件的用户创建和更新地址。我正在苦苦挣扎,因为我无法弄清楚如何将个人资料放入关联链中,以在用户和地址之间 link。
此策略的当前错误方法从创建开始?功能:
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
谁能知道怎么做?
您可以检查用户的地址是否包含地址:
user && user.profile.addresses.exists?(address.id)