7

オンラインのチュートリアルに従った後、 Person というモデルがありました。しばらくして、名前を User に変更する方が賢明であると判断しました。コードベースを調べて、次のことを行いました。

  1. Person から User、Person から User、People から Users、People から Users のすべてのインスタンスの名前を変更し、無関係なものを壊さないように注意しました。
  2. すべてのモデル ファイルの名前を適切に変更しました。

私はセッションと呼ばれる別のモデルを持っています:

セッションの属し_ユーザー

ユーザー has_many セッション

移行を実行する前に git grep -i person / people および find | 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    

どうすればこれを修正できますか?

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 に答える