テクノロイド

コンピュータやゲーム他、色々日々思ったことをつづっていきます。

railsで携帯の番号管理やってみる(3)

2014-02-06 22:26:20 | Ruby, Rails,プログラミング
ここを参考に作業した。
オリジナルは英語のここなので、見比べながら。

"changed is defined by Active Record"というエラーが出て何のことやらわからず悩んでいたんだが、contractsテーブルのカラム名に"changed"って使ってたからだった。どんなカラム名付けたかすっかり忘れてたのでハマった。
というわけでカラム名の変更。
$ rails g migration rename_changed_to_contracts
命令は自分で記述する必要があるようだ。
rename_column :contracts, :changed, :changedate

そうこうしてたら、あちゃー、referenceの張り方間違えてるショック!
number:references(カラム名)じゃなくてphonenum:references(テーブル名)にしなきゃいけなかった。
結局rake db:rollback STEP=3でPhonenumだけの状態にして、contractsのmigrationファイルを書き換えるハメに。
rails g scaffold Contract phonenum:references owner:string model:string carrier:string changedate:date comment:text
ふう、やっと表示が上手く行った。
いやあ~Railsって後戻りも楽チンだからうれしい。

実際に登録をやってみるが、contractコントローラーのcreateメソッドのとこで
@contract = @phonenum.contracts.create(params[:contract])
とやるとアクセスエラー。
Rails4のStrongParameterに引っかかった。
@contract = @phonenum.contracts.create(params[:contract].permit(:carrier,~))
みたいにpermitしなければならなかった。
これはcarrierカラムを後付けで作ったからだった。privateのとこにcontract_paramsメソッドが記述されてるので、そこに追加してそれを呼ぶように修正。
@contract = @phonenum.contracts.create(contract_params)
それと@contract = Contract.find(params[:id])もprivateメソッドが定義されてて、before_actionで呼び出されてるのでdeleteのところ等で記述する必要はなかった。
あと、親がdeleteされた時の為にmodelのhas_manyのところにdependent: :destroyも入れとくの忘れないように。

やっとひととおりの流れは完成。
コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« railsで携帯の番号管理やって... | トップ | railsで携帯の番号管理やって... »
最新の画像もっと見る

コメントを投稿

Ruby, Rails,プログラミング」カテゴリの最新記事