重命名模型并更改对模型的所有引用后,引用仍保留到以前的名称

时间:2012-10-04 10:57:41

标签: ruby-on-rails ruby activerecord

我在网上学习了一个名为Person的模型。过了一会儿,我们决定将它重命名为User更为明智。我浏览了代码库并执行了以下操作:

  1. 将所有人物实体用户,用户用户,用户用户和用户用户重命名,注意不要破坏任何不相关的内容。
  2. 正确重命名所有模型文件。
  3. 我有另一个名为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    
    

    我该如何解决这个问题?

3 个答案:

答案 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