1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

current_page?(controller: 'library', action: 'checkout')がワークしなくて困った件(Rails)

Last updated at Posted at 2021-05-05

やりたいこと

ページによって、検索フォームをビューで、表示する/しないを切り替えたいです。

そこで、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メソッドのはずなのに...。

何かご指摘やアドバイスなどあれば、ぜひよろしくお願いします。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?