css - Rails - 当 URL 中存在参数时显示/隐藏 CSS 类

标签 css ruby-on-rails parameters

在我看来,我有一个表单,我只想在其参数出现在 URL 中时显示输入:

= form_tag search_path, :method => :get do
  = select_tag 'search[type]', options_for_select([['Publishers', 'publishers'], ['Editions', 'editions'], ['Contributors', 'contributors']], selected = (params[:search][:type] rescue nil)), prompt: "Search type", :required => "true"

  = select_tag 'search[filter]', options_for_select([['Filter by', 'filter_by'], ['All', 'all']], selected = (params[:search][:filter] rescue nil)), prompt: "Select filter", :required => "true"

  - invisible = params[:search][:value].present? ? '' : 'invisible'
  = text_field_tag 'search[value]', (params[:id] || params[:search][:value] rescue nil), :required => "true", :class =>  "#{invisible}", :placeholder => "Type search"

我的想法是控制它显示一个名为“invisible”的 CSS 类,带有 display: none;,如上。但是,当我渲染 View 时,它会在我声明“不可见”的行中返回此 Rails 错误:

undefined method `[]' for nil:NilClass

怎么了?

最佳答案

这是因为当表单正在加载时,params[:search] 为 nil,而您正试图对其调用 [:filter],因此未定义方法 [] 为 nil。

有多种解决方案,有些不错,有些不太好,选择你最喜欢的:

invisible = params[:search].try(:[], :value) ? '' : 'invisible'
invisible = params[:search] && params[:search][:value] ? '' : 'invisible'
invisible = (params[:search] || {})[:value] ? '' : 'inivisble'
invisible = (params[:search][:value] rescue nil) ? '' : 'invisible'

关于css - Rails - 当 URL 中存在参数时显示/隐藏 CSS 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27898886/

相关文章:

html - Webkit 背景图像被剪裁

html - Webkit CSS3 列为其容器添加额外的填充。

css - IE7 - 试图将两个相邻的 div 放在按钮标签中

ruby-on-rails - 更新列而不更改 updated_at

c# - 将多个可选参数传递给 C# 函数

java - 综合参数与隐式参数

c - 方法的位标志参数如何工作(Ansi C/C)?

具有渐变的 CSS3 背景图像纹理不起作用

ruby-on-rails - Rails 没有在 ajax post 上重新加载 session

ruby-on-rails - 如何计算数组中连续的数字?