質問: gem 'sqlite3' gem 'rails-i18n' # この行を追加(ransackには関係ないけどdate_select用) gem 'ransack' # この行を追加 〜〜( 以下 略 )〜〜 【bundle installを実行】 bundle install 【今回のサンプル用にscaffold】 ユーザーモデルと、ユーザーが紐づく掲示板モデルを作成します。 rails g scaffold user name:string rails g scaffold topic title:string content:text user:references 【掲示板モデルでユーザーを登録するためにちょろっと修正】 app/models/topic.rb class Topic < ActiveRecord::Base belongs_to :user attr_accessible :content, :title, :user_id #この行を修正 end 【ユーザーをselectタグで選択できるように】 app/views/_form.html.erb <%= form_for(@topic) do |f| %> 〜〜 ( 中略 ) 〜〜 <%= f.label :user %> <%= f.select :user_id, User.all.map { |u| [u.name, u.id] } %> <%= f.submit %> <% end %> 【一覧からcontentを削除し、created_atを追加、ユーザー名を表示するように変更】 app/views/index.html.erb Listing topics Title User Created At <% @topics.each do |topic| %> <%= topic.title %> <%= topic.user.name %> <%= topic.created_at.strftime('%Y/%m/%d %H:%M') %> <%= link_to 'Show', topic %> <%= link_to 'Edit', edit_topic_path(topic) %> <%= link_to 'Destroy', topic, method: :delete, data: { confirm: 'Are you sure?' } %> <% end %> <%= link_to 'New Topic', new_topic_path %> 【詳細でユーザー名を表示するように変更】 app/views/topic/show.html.erb 〜〜 ( 中略 ) 〜〜 User: <%= @topic.user.name %> 〜〜 ( 中略 ) 〜〜 【表示してみる】 http://localhost:3000/users → 成功! http://localhost:3000/topics → 失敗... エラー表示は ブラウザ:NoMethodError in TopicsController#index ターミナル:NoMethodError (undefined method `attr_accessible' for #): app/models/topic.rb:3:in`' app/models/topic.rb:1:in `' app/controllers/topics_controller.rb:7:in`index' という具合です。。。 ご意見お願い致します!!!
回答: `undefined method attr_accessible`とあるように、Rails4では`attr_accessible`は使えません。 対応策としては3つあります。 * 記事の通りにRails3.2.11にする。 * Rails4のままで、モデル属性へのアクセス制限にStrong Parametersを使用するように変更する。 * Rails4のままでattr_accessibleが使えるようにProtected Attributesを使用する。 記事の通りにやりたいのであれば最初の方法がよいですし、Rails4でやりたいというのであればStrong Parametersがよいでしょうか。Protected Attributesは導入は簡単ですが、Strong Parametersという機能がある以上、新規Rails4プロジェクトで使用するべきものではないと思います。