【问题标题】:ActiveRecord: Do I need both belongs_to and has_oneActiveRecord:我需要belongs_to 和has_one
【发布时间】:2012-11-18 02:22:01
【问题描述】:

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

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_tohas_one 就足够了?其他方法也是如此,例如 has-many

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

    您可以在任何需要的地方定义关联。如果在某些时候你需要说user.userprofile,那么在User 中包含has_one :userprofile。同样,如果您需要说userprofile.user,则在Userprofile 中包含belongs_to user

    换句话说,关联是相对的。您可以指定模型 A has_one :b 而不指定模型 B belongs_to :a。您只需定义您需要什么。一对多和多对多关联也是如此。

    请确保已将 user_id 迁移到“用户配置文件”表中。

    【讨论】:

    • 有道理。另外,我需要添加 :dependent => destroy 吗?确保当用户被删除时,他的个人资料也被删除?最后,要生效,我需要运行 rake db:migrate 吗?
    • 是的。通过将:dependent =&gt; destroy 放在Userprofile 中,您是在告诉模型销毁其用户不再存在的任何用户配置文件记录。是的,您需要在创建将user_id 添加到Userprofile 表的迁移后运行rake db:migrate。此外键用于强制关联。
    【解决方案2】:

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

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

    查看http://guides.rubyonrails.org/association_basics.html了解更多信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-01
      • 2014-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多