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)