【发布时间】:2012-11-16 20:02:09
【问题描述】:
我刚刚完成了 Michael Hartl Rails 教程。尝试做我自己的东西。
我无法通过 Rails 了解我正在尝试创建的关系。我会尽量简化这一点。一棵有树枝、树枝和树叶的树会很合适,但是......
我将使用父子格式作为示例。所以很自然地我就有用户,假设用户创建了家庭。
所以:
Class User < ActiveRecord::Base
has_many :families
has_many :parents
has_many :children
end
Class Family < ActiveRecord::Base
belongs_to :user
has_many :parents
end
Class Parent < ActiveRecord::Base
belongs_to: :user
belongs_to: :family
has_many: :children
end
Class Child < ActiveRecord::Base
belongs_to :user
belongs_to :parent
end
如您所见,我希望孩子属于属于家庭的父母,但孩子本身不属于家庭,除非通过父母。如果这不是一个比喻,但在这种特殊情况下是真实的,这很可悲。 ;)
我在Parent下试过了:
has_many :children, through: :parent
和
has_many :children, through: :family
但这没有用。
当我尝试使用时:
User.family.new
或
User.child.new
...它说该方法不存在。我认为这意味着它不了解这些关系。
我做错了什么?
如果相关的话,family、parent、child 表中现在唯一的就是这些列:
t.string :content
t.integer :user_id
【问题讨论】:
-
您正在呼叫
User.family.new,User.family未定义。 AR 关系不创建类方法,只创建实例方法,因此如果您有@parent,则可以调用@parent.children,前提是您在父方法中有has_many :children。在这种情况下只需调用Child.new或@parent.children.build,您需要家长来执行此操作 -
原谅我,刚刚离开 railstutorial 来尝试我自己的应用程序,但是在教程中你有 Microposts 和 Users,当你设置 Micropost belongs_to User 和 User has_many Microposts 你可以然后做 User.microposts 或 User.micropost.new。为什么会有所不同?
-
User的使用是调用名为'User'的模型。它不是实际用户,而是您正在调用的模型。User.create将创建一个实例化对象用户。例如:user_object = User.create:user_object是 User 类型的实例化对象。 -
只是一个观察,但如果让 Child 和 Parent 成为 User 的子类,并有一个 Family 类,它有_many 个父母(并且通过父母有_many 个孩子),这不是最有意义的吗?有很多孩子的父母。也许我只是过度分析了你的例子。
标签: ruby-on-rails methods table-relationships