Rails 4 has_one 通过where子句
Rails 4 has_one through with where clause
我正在尝试通过 has_one 在两个模型 Client
和 Address
之间建立直接关系,如 has_one
:billing_address
但 Client
与 Address
没有直接关系,Contact
有,模型:
客户端
class Client < ActiveRecord::Base
belongs_to :contact
accepts_nested_attributes_for :contact
end
联系
class Contact < ActiveRecord::Base
has_one :client
has_many :addresses, dependent: :destroy
accepts_nested_attributes_for :addresses, allow_destroy: true
end
地址
class Address < ActiveRecord::Base
belongs_to :contact
enum kind: [:address, :shipping, :billing]
end
所以我想要的是能够执行 Client.shipping_address
或 Client.billing_address
,Address
模型中的 enum
将允许查询。这背后的原因是因为 Client
的 Contact
将有两个地址记录,一个用于账单,一个用于运输,我想通过关系快速访问
我在客户端模型中试过:
has_one(:billing_address, -> { where(kind: :billing) }, class_name: Address, through: :contact)
但是当我在视图中时:
client.billing_address
我收到一个 undefined method to_sym' for nil:NilClass
我似乎无法解决它,谢谢。
我正在尝试通过 has_one 在两个模型 Client
和 Address
之间建立直接关系,如 has_one
:billing_address
但 Client
与 Address
没有直接关系,Contact
有,模型:
客户端
class Client < ActiveRecord::Base
belongs_to :contact
accepts_nested_attributes_for :contact
end
联系
class Contact < ActiveRecord::Base
has_one :client
has_many :addresses, dependent: :destroy
accepts_nested_attributes_for :addresses, allow_destroy: true
end
地址
class Address < ActiveRecord::Base
belongs_to :contact
enum kind: [:address, :shipping, :billing]
end
所以我想要的是能够执行 Client.shipping_address
或 Client.billing_address
,Address
模型中的 enum
将允许查询。这背后的原因是因为 Client
的 Contact
将有两个地址记录,一个用于账单,一个用于运输,我想通过关系快速访问
我在客户端模型中试过:
has_one(:billing_address, -> { where(kind: :billing) }, class_name: Address, through: :contact)
但是当我在视图中时:
client.billing_address
我收到一个 undefined method to_sym' for nil:NilClass
我似乎无法解决它,谢谢。