やりたいこと
ページによって、検索フォームをビューで、表示する/しないを切り替えたいです。
そこで、current_page?()
なるメソッドがあることを知りまして、カッコ内の引数には、Railsドキュメントによると、URLだけでなく、コントローラとアクションを指定することも可能とのこと。(2021/5/5執筆時時点)
開発環境
MacBook Pro 13 2020
macOS Catalina 10.15.7
ruby 3.0.0
Rails 6.0.3
問題
こちらのRailsドキュメントのお手本コードを真似して...
current_page?(controller: 'library', action: 'checkout')
こう書いてみます。
<%= render 'search_form' if current_page?(controller: 'expressions', action: 'index'} %>
しかしながら、wrong number of arguments (given 0, expected 1)
などとエラーが出てしまいます。given 0?いや、引数渡してるやん。なんなら、2つない?
余談ですが、URLの指定(例えばcurrent_page?('/')
)はうまくいきました。
でも今やりたいことはそれではない!
ググっても解決法が出てこなくて、みんなこの上のコードでできる!と断言しておられます。
いや、できねーし!(泣)
シングルクオーテーション、ダブルクオテーションを試すという愚かな実験をするくらい、手当たり次第自分で色々試してみたところ、一つだけ見つけました。
それが下記です。
解決
<%= render 'search_form' if current_page?({controller: 'expressions', action: 'index'}) %>
丸括弧内で、ハッシュで一塊りにして渡してあげれば、引数argumentが1つあるとみなしてもらえるみたいです。
これで指定したコントローラとアクション以外で生成されたページでは、検索フォームが出なくなりました。
めでたし、めでたし...?
最後に
と終わりたかったところなのですが、エラーこそ出なくなったのですが、検索後の画面では、'search_form'が消えてしまいます涙。同じexpressionsコントローラのindexメソッドのはずなのに...。
何かご指摘やアドバイスなどあれば、ぜひよろしくお願いします。