質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.35%

  • Ruby on Rails 4

    2509questions

    Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

NoMethodError in TopicsController#indexの原因は???

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 657

s.k

score 249

こんにちは!
railsで検索機能を実装したいですが、コーディング過程で上記の問題にぶつかり先に進めなくなってしまいました。。。

ぜひ、お力添えをお願いします!!

参考記事
検索用のgem「ransack」を使ってみる(http://qiita.com/LuckOfWise/items/e020e896e71d47d0c6a4)

ほぼ、上記事と同様のフローです。
ただし、私はwindowsですので、vi Gemfileのコードは無視しています。

以下、記入コードです。

【プロジェクトを作成】

rails new ransack_study -T --skip-bundle
cd ransack_study

【localeとtimezoneを設定】

config/application.rb
require File.expand_path('../boot', FILE)
〜〜 ( 中略 ) 〜〜
module RansackStudy
class Application < Rails::Application
〜〜 ( 中略 ) 〜〜

 Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.

 Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.

 config.time_zone = 'Central Time (US & Canada)'

config.time_zone = 'Tokyo'
config.active_record.default_timezone = :local

 The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.

 config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]

 config.i18n.default_locale = :de

config.i18n.default_locale = :ja

 Configure the default encoding used in templates for Ruby 1.9.

config.encoding = "utf-8"
〜〜 ( 中略 ) 〜〜
end
end

【Gemfileに追記】

vi Gemfile→無視

source 'https://rubygems.org'

gem 'rails', '3.2.11'

 Bundle edge Rails instead:

 gem 'rails', :git => 'git://github.com/rails/rails.git'

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| %>
〜〜 ( 中略 ) 〜〜
<div class="field">
<%= f.label :user %><br />
<%= f.select :user_id, User.all.map { |u| [u.name, u.id] } %><!--この行を修正-->
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>

【一覧からcontentを削除し、created_atを追加、ユーザー名を表示するように変更】

app/views/index.html.erb
<h1>Listing topics</h1>

<table>
<tr>
<th>Title</th>
<th>User</th>
<th>Created At</th><!--この行を修正-->
<th></th>
<th></th>
<th></th>
</tr>

<% @topics.each do |topic| %>
<tr>
<td><%= topic.title %></td>
<td><%= topic.user.name %></td><!--この行を修正-->
<td><%= topic.created_at.strftime('%Y/%m/%d %H:%M') %></td><!--この行を修正-->
<td><%= link_to 'Show', topic %></td>
<td><%= link_to 'Edit', edit_topic_path(topic) %></td>
<td><%= link_to 'Destroy', topic, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</table>

<br />

<%= link_to 'New Topic', new_topic_path %>

【詳細でユーザー名を表示するように変更】

app/views/topic/show.html.erb
〜〜 ( 中略 ) 〜〜
<p>
<b>User:</b>
<%= @topic.user.name %><!--この行を修正-->
</p>
〜〜 ( 中略 ) 〜〜

【表示してみる】
http://localhost:3000/users → 成功!
http://localhost:3000/topics → 失敗…

エラー表示は
ブラウザ:NoMethodError in TopicsController#index
ターミナル:NoMethodError (undefined method attr_accessible' for #<Class:0x0000000ad80c48>):   app/models/topic.rb:3:in <class:Topic>'
app/models/topic.rb:1:in <top (required)>'   app/controllers/topics_controller.rb:7:in index'

という具合です。。。

ご意見お願い致します!!!

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • guest1213

    2016/09/05 17:15

    「vi Gemfileのコードは無視しています。」とはどういうことですか?他のエディタでもGemfileを編集していないということですか?
    質問のタグはRails4ですが、もしその記事通りにやっていてGemfileもその通りになっていればRails3.2.11のはずです。
    Rails4上での出来事であれば原因に心当たりがありますので、よろしければRailsのバージョンをタグではなく質問の方に追記してください。

    キャンセル

  • s.k

    2016/09/05 21:41

    遅れました!
    とりあえず、返信で情報を追加させていただきます!

    ・Gemfileは修正しました!(ターミナルにvi Gemfileを撃ち込まず直接エディタで指定されたコードを書きました!)
    ・Railsのバージョンは4.2.6です!!

    お手数おかけしますが、
    よろしくお願いします!!!

    キャンセル

回答 1

checkベストアンサー

0

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プロジェクトで使用するべきものではないと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/09/06 00:26

    guest1213さん

    ご丁寧にありがとうございます!
    そうなんですね!

    ということは、自分でカスタマイズしながらチュートリアルを受けねばなりませんね!
    燃えてきました!

    またよろしくお願いします!

    キャンセル

  • 2016/09/06 00:55

    すでにRails5もリリースされています。何かの製品を作るのが目的にしろ、Railsの学習目的にしろ、参考にしている情報が3年以上も前のRails3のものなので古いと思います。
    差し出がましいかもしれませんが、どうせ新しく覚えるなら最新の環境を使った方がより面白いかと思います。(個人的にはフレームワークを使う時点でつまらないですが…。これはこういうもんだからこう使え!みたいなのはどうもね…使ってるけど…)

    キャンセル

  • 2016/09/06 01:22

    5もリリースされているのですね...
    これからはバージョンにも目をつけていきます!
    確かに、最新の環境を使うべきですね(笑)
    視野を広げてもらい非常に助かります^o^

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Ruby on Rails 4

    2509questions

    Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。