has_one没有更新属性ID?

时间:2013-08-05 15:34:23

标签: ruby-on-rails postgresql

所以我有一个数据库关系,其中User有一个PreferenceList。我在数据库表中设置了preference_list_id,并且我与PreferenceList建立了belongs_to :user关系,并与User建立了has_one :preference_list关系。

这是奇怪的部分。如果我user.preference_list = preference_list,我可以访问user.preference_list,它会给我正确的preference_list实例。但是,如果我执行user.preference_list_id(一个有效的列,我已经检查过),即使在我将preference_list添加到user.preference_list之后,它也没有给我任何内容。我需要为各种数据库操作更新id。我究竟做错了什么?

1 个答案:

答案 0 :(得分:2)

外键用于声明belongs_to关联的类的表。所以,如果你有

class PreferenceList < ActiveRecord::Base
  belongs_to :user
end

class User < ActiveRecord::Base
  has_one :preference_list
end

表格preferences_lists应包含user_id列。 Rails将正确处理这些列。您也可以将preference_list_id列添加到users表。但是这个专栏没有特别的意义,Rails默认不做任何事情。如果您确实需要操作preference_list_id,请尝试更改belongs_to / has_one。或者使用user.preference_list.id