Rails3のアップデートに伴うサポート事項

このページは「はじめてのRuby on Rails3」(工学社刊、ISBN978-4-7775-1563-9)のサポートページです。
Railsのアップデートに伴って仕様が変わり、本書の内容が実践できなくなった箇所について説明しています。

 その他のサポート事項については、「はじめてのRuby on Rails3サポートページ」を御覧下さい。

関連トピック:UbuntuにRailsをインストールしてみよう

「Ubuntu Desktop」に、Railsをインストールする方法を掲載しました。LinuxでRails3.2.3のインストールに苦労しているという場合、こちらが参考になるかと思います。
「UbuntuでRails3.2.3」を御覧下さい。

Can't mass-assign protected attirutesのエラー

本書6-7節「ビューにドロップダウン・リストを導入」時のエラー

本書第6-7節(216ページ以降)において、小アプリケーション「item」のファイル「_form.html.erb」を、219ページのリスト6-6のように編集したあとのことです。
「items」の「New」ページを開いて、データを入力することはできますが、「create」ボタンをクリックすると、以下のようなエラーメッセージになってしまうのではないでしょうか。
Can't mass-assign protected attributes: categ_id

モデルのファイル「item.rb」の内容が変わっている

これは、最近のRailsで、「モデル」を表すファイルの内容が、変わっていることによります。
「app/models」フォルダを開いて、ファイル「item.rb」をテキスト・エディタで開いてみてください。
以下のような自動記入がなされているはずです。
item.rbの内容
class Item < ActiveRecord::Base
  belongs_to :categ
  attr_accessible :name, :dscr, :price, :onsale, :stock, :simplename
end


「attr_accessible」とは、「変更できる属性」のことです。この中に「categ_id」がありませんね。
Rails3.2.3など、最近のRailsは、セキュリティのために、ひとつひとつの属性にアクセス許可を指定するようになったようです。
そのとき、「id」のような大事な属性、他の小アプリケーション(テーブル)に関わるような属性は、初期設定で保護されているようです。

attr_accessibleに「:categ_id」を加える

そこで、以下のように、この「attr_accessible」の一覧に、「:categ_id」を加えます。最初に「:」がつきますので注意してください。
item.rbの変更個所
 attr_accessible :name, :dscr, :price, :onsale, :stock, :simplename, :categ_id

これで、新しいデータを作成できるようになります。
 その他のサポート事項については、「はじめてのRuby on Rails3サポートページ」を御覧下さい。