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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

Q&A

解決済

1回答

1766閲覧

paramsに値が入らない

dfasdf

総合スコア6

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

0グッド

1クリップ

投稿2021/04/13 05:02

編集2021/04/13 05:03

現在プログラミング学習を兼ねて、rails 6を用いてアプリケーションの開発を行なっているのですが、検索フォームを実装しようとした時に下記のエラーになってしまいます。

NameError in StaticPagesController#home undefined local variable or method `params' for #<User:0x000055b770057508> def feed_search_items Micropost.search(params[:search]) end

うまくparamsに値が代入されていないことが原因だと考えているのですが、text_field_tagに:searchを記述しており、こちらからparams[:search]の値は入ると思うのですが、どこを直せば良いのかわかりません。
ご回答お願いします。下記がソースコードになります。

_header.html.erb

1<header class="navbar navbar-fixed-top navbar-inverse"> 2 <div class="container"> 3 <%= link_to "trawith", root_path, id: "logo" %> 4 <nav> 5 <ul class="nav navbar-nav navbar-right"> 6 <li><%= link_to "Home", root_path %></li> 7 <li><%= link_to "About", about_path %></li> 8 <% if logged_in? %> 9 <li><%= link_to "Users", users_path %></li> 10 <li class="dropdown"> 11 <a href="#" class="dropdown-toggle" data-toggle="dropdown"> 12 Account <b class="caret"></b> 13 </a> 14 <ul class="dropdown-menu"> 15 <li><%= link_to "Profile", current_user %></li> 16 <li><%= link_to "Settings", edit_user_path(current_user) %></li> 17 <li class="divider"></li> 18 <li> 19 <%= link_to "Log out", logout_path, method: :delete %> 20 </li> 21 </ul> 22 </li> 23 <li> 24 <%= form_tag(search_path, :method => 'get') do %> 25 <%= text_field_tag :search, placeholder: "Search..." %> 26 <%= submit_tag '検索', :name => nil %> 27 <% end %> 28 </li> 29 <% else %> 30 <li><%= link_to "Log in", login_path %></li> 31 <% end %> 32 </ul> 33 </nav> 34 </div> 35</header> 36
def self.search(search) if search Micropost.where(['content LIKE ?', "%#{search}%"]) else flash[:wrong] = "該当するものが見つかりませんでした" redirect_to root_url end end def feed_search_items Micropost.search(params[:search]) end
class StaticPagesController < ApplicationController def home if logged_in? @micropost = current_user.microposts.build @feed_items = current_user.feed.paginate(page: params[:page]) @feed_search_items = current_user.feed_search_items.paginate(page: params[:page]) end end def about end def contact end end
<% if @feed_search_items.any? %> <ol class="microposts"> <%= render @feed_search_items %> </ol> <%= will_paginate @feed_search_items, params: { controller: :static_pages, action: :home }%> <% end %>

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

params が使えるのは view と controller だけで、model では使えません。
なので、引数として params の値を渡す必要があります。

■ model側

diff

1- def feed_search_items 2+ def feed_search_items(search_text) 3- Micropost.search(params[:search]) 4+ Micropost.search(search_text) 5 end

■ controller側

diff

1 def home 2 if logged_in? 3 @micropost = current_user.microposts.build 4 @feed_items = current_user.feed.paginate(page: params[:page]) 5- @feed_search_items = current_user.feed_search_items.paginate(page: params[:page]) 6+ @feed_search_items = current_user.feed_search_items(params[:search]).paginate(page: params[:page]) 7 end 8 end

投稿2021/04/13 05:34

shinoharat

総合スコア1685

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dfasdf

2021/04/13 05:43

回答ありがとうございます! modelではparamsが使えないのですね...。 修正をしたのですが、今度は下記のエラーが出てしまいました。 NoMethodError in StaticPagesController#home undefined method `search' for #<Class:0x000056101d358058> def feed_search_items(search_text) Micropost.search(search_text) end 今度はおそらくsearchが定義されていないことが原因だと考えているのですが、こちらはどこを修正すればよろしいでしょうか?
shinoharat

2021/04/13 06:00

Micropost クラスに search という名前のクラスメソッドを定義してください。 クラスメソッドというのは、「self.」で始まるメソッドのことです。 以下に例を示します。 def self.search(search_text) end search メソッドの内部処理は宿題にしますので、考えてみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問