我有两个通过has_many / belongs_to关联的模型。我在子模型中创建了一个类方法。但我无法弄清楚如何从类方法中访问父模型的实例方法。这是我正在尝试做的简化:
#User model
class User < ActiveRecord::Base
has_many :addresses
def first_name
"John"
end
def last_name
"Doe"
end
end
#Address model
class Address < ActiveRecord::Base
belongs_to :user
def self.full_name
parent.first_name + " " + parent.last_name
#returns full name of parent "John Doe"
end
end
我希望能够在Rails控制台中运行它并让它返回“John Doe”......但没有运气。有什么建议吗?
@user = User.first
@user.addresses.full_name
答案 0 :(得分:0)
@user.addresses.full_name
这会返回一个数组,因此您需要从数组中选择一个对象,假设该数组不为空。
@user.address.first.full_name
这取得了什么成果?因为您可以从用户对象获取全名,并且不应该根据地址进行更改:(
class User < ActiveRecord::Base
has_many :addresses
def first_name
"John"
end
def last_name
"Doe"
end
def full_name
self.first_name + " " + self.last_name
end
end
现在您可以从full_name
对象
@user
了
@user.full_name
答案 1 :(得分:0)
您将类继承与模型关系以及使用实例方法的类方法混淆。
失去了“自我”。在“def self.full_name”中 - 它没有按照你的想法行事。然后将“parent”替换为“user”。 Parent给你一个ActiveRecord :: Base的引用,它与你定义的关系无关。 “user”将为您提供该特定地址的User对象,这可能是您正在寻找的。 p>
之前的答案已经解释为什么你不能在@ user.addresses上调用“full_name”。