ruby-on-rails 如何让current_page?匹配多个操作?

5cg8jx4n  于 2023-03-20  发布在  Ruby
关注(0)|答案(4)|浏览(119)

我的问题是我试图做一些

current_page?(controller: 'tigers', action:('index'||'new'||'edit'))

当控制器是tigers并且操作是index、new或edit时,返回true。
上面的操作不会抛出错误,但只匹配第一个操作。
救命!

tkqqtvp1

tkqqtvp11#

比较冗长,但有效:

current_page?(controller:'bikes') &&
 (current_page?(action:'index') ||
  current_page?(action:'new')   ||
  current_page?(action:'edit'))

不那么冗长,也可以:

params[:controller] == 'bikes' && %w(index new edit).include?(params[:action])

%w()是生成空格分隔字符串数组的快捷方式

jexiocij

jexiocij2#

你也可以这样做:

if current_page?(root_path) || current_page?(about_path) || current_page?(contact_path) || current_page?(faq_path) || current_page?(privacy_path)

注意:不要在括号前留下空格,否则它将不起作用。

mwkjh3gx

mwkjh3gx3#

使用current_page?方法的另一种方法是直接检查params散列:

params[:action] == ('index' || 'new' || 'edit')

如果是索引、新建或编辑,将返回true。您也可以通过params[:controller]访问控制器。

4nkexdtk

4nkexdtk4#

如果你想让所有的动作都与一个特定的控制器相关,你可以使用“controller_name”方法,如下所示

if controller_name == 'your_controller_name'

“controller_name”是从ActionController::基类继承的方法,默认情况下,它在所有视图和助手中都可用。

相关问题