[英]How do I access instance variables of parent model in Rails?
我有两个通过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
@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
所以现在您可以从@user
对象访问full_name
@user.full_name
您将类继承与模型关系,类方法与实例方法混淆。
失去“自我”。 在“ def self.full_name”中-它没有按照您的想法进行。 然后将“ parent”替换为“ user”。 父母为您提供了ActiveRecord :: Base的引用,该引用与您已定义的关系无关。 “用户”将为您提供该特定地址的用户对象,这可能就是您要查找的对象。
前面的答案已经解释了为什么不能在@ user.addresses上调用“ full_name”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.