7

在网上学习了一个教程后,我有了一个名为 Person 的模型。一段时间后,我们决定将其重命名为 User 更为明智。我浏览了代码库并执行了以下操作:

  1. 将 Person 到 User、person to user、People to Users 和 people 到 users 的所有实例重命名,注意不要破坏任何不相关的内容。
  2. 适当地重命名所有模型文件。

我有另一个名为 session 的模型:

会话属于用户

用户 has_many 会话

在运行迁移之前 git grep -i person / people 并找到 | grep person / people 只是返回迁移,所以我确定我已正确重命名所有内容。

当我去创建一个随后创建会话的新用户时,我收到以下错误:

未知属性:user_id

再次运行 git grep 发现 session 中的外键还是 person_id

create_table "sessions", :force => true do |t|                                                                                                                             
    t.integer  "person_id
    t.string   "ip_address"                                                                                
    t.string   "path"
    t.datetime "created_at", :null => false
    t.datetime "updated_at", :null => false
end    

我怎样才能解决这个问题?

4

3 回答 3

14

只是在迁移中做

def change
   rename_column :sessions, :person_id, :user_id
end
于 2012-10-04T11:20:07.197 回答
1

如果您更改关联的名称,而不是基础列的名称,则必须在关联中明确说明:

class Session 
  belongs_to :user, :foreign_key => "person_id", :inverse_of => :sessions
end

class User
  has_many :sessions, :foreing_key => "person_id", :inverse_of => :user
end
于 2012-10-04T11:03:10.077 回答
0

在会话表中,您必须将 person_id 更改为 user_id,

for that you have to add new migration for adding user_id and remove person_id

def change
  add_column :sessions, :user_id, :integer
  remove_column :sessions, :person_id, :integer
end
于 2012-10-04T11:02:47.660 回答