如何在Rails中访问父模型的实例变量?

时间:2010-11-09 01:25:47

标签: ruby-on-rails methods associations parent-child

我有两个通过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

2 个答案:

答案 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对象,这可能是您正在寻找的。

之前的答案已经解释为什么你不能在@ user.addresses上调用“full_name”。

相关问题