Ruby on rails Rails 4-专家和协会

Ruby on rails Rails 4-专家和协会,ruby-on-rails,devise,associations,polymorphic-associations,pundit,Ruby On Rails,Devise,Associations,Polymorphic Associations,Pundit,我正在尝试用Rails 4制作一个应用程序 我用的是博学和设计 我正试图用权威的语言写一份施政报告 我有三个相关的模型,分别是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 =>

我正在尝试用Rails 4制作一个应用程序

我用的是博学和设计

我正试图用权威的语言写一份施政报告

我有三个相关的模型,分别是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
信息是:

undefined method `profile' for #<Address:0x007fbad7ac0cf8>

有人知道怎么做吗?

您可以检查用户的地址是否包括以下地址:

user && user.profile.addresses.exists?(address.id)

你好-谢谢普拉梅纳。这是有效的,在这项工作的最后(address.id)是什么?为什么这项工作在create操作中有效?用户添加新地址时没有地址?您好。方法“exists?”采用id或条件-以下是文档:。您可以使用它只允许地址的所有者编辑它。创建地址的限制是什么?不是“user.present?”够了吗?我希望拥有该地址的用户能够创建/更新/销毁。您可以允许具有特定地址的用户创建新地址,但如果您希望允许没有地址的用户创建新地址,则应仅检查该用户是否存在或其他业务规则。也许我遗漏了一些东西,但地址在创建之前没有所有者。
class ApplicationPolicy
  attr_reader :user, :record

  def initialize(user, record)
    @user = user
    @record = record
  end
user && user.profile.addresses.exists?(address.id)