ActiveRecord:我是否需要belongs_to和has_one

时间:2012-11-18 02:22:01

标签: ruby-on-rails activerecord

我有2个模型,即用户用户配置文件。用户和用户配置文件之间存在一对一的关系

class Userprofile < ActiveRecord::Base
   attr_accessible :fname, :lname, :iswoman, :age, :urlphoto, :user_id

   belongs_to: user

end

class User < ActiveRecord::Base
   attr_accessible :name, :provider, :uid

   has_one: userprofile
end

我想知道我是否需要同时设置连接类,或只需要 belongs_to has_one 就足够了?其他方法也是如此,例如 has-many

2 个答案:

答案 0 :(得分:28)

您可以在任何需要的地方定义关联。如果您在某个时候需要说user.userprofile,请在has_one :userprofile中加入User。同样,如果您需要说userprofile.user,请在belongs_to user中添加Userprofile

换句话说,协会是相对的。您可以指定模型A has_one :b,而无需指定模型B belongs_to :a。您只需定义所需内容即可。对于一对多和多对多关联也是如此。

请务必将user_id迁移到“userprofiles”表。

答案 1 :(得分:1)

在userprofiles和user之间只有一个belongs_to关系,默认为has_one。但是,在两个模型上指定关联是明智的(Rails-proper)。

毕竟,如果你想要一个has_many关联(等),你需要指定它。

查看http://guides.rubyonrails.org/association_basics.html了解详情