我在网上学习了一个名为Person的模型。过了一会儿,我们决定将它重命名为User更为明智。我浏览了代码库并执行了以下操作:
我有另一个名为session的模型:
session belongs_to user
和
用户has_many会话
在运行迁移之前,git grep -i person / people并找到| grep person / people只返回迁移,所以我确信我已经正确地重命名了一切。
当我去创建一个随后创建会话的新用户时,我收到以下错误:
未知属性:user_id
再次运行git grep我发现会话中的外键仍然是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
我该如何解决这个问题?
答案 0 :(得分:9)
只是在迁移
def change
rename_column :sessions, :person_id, :user_id
end
答案 1 :(得分:1)
,您必须将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
答案 2 :(得分: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