【问题标题】:Rails - Show/hide CSS class when parameter exist in URLRails - 当 URL 中存在参数时显示/隐藏 CSS 类
【发布时间】:2015-01-12 09:34:44
【问题描述】:

在我看来,我有一个表单,我只想在其参数出现在 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"

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

undefined method `[]' for nil:NilClass

怎么了?

【问题讨论】:

  • 你能粘贴你的网址吗?
  • params 或 params[:search] 为 nil ...
  • 不是我需要完整的参数列表。请在您的控制器操作中提出 params.inspect 并将结果粘贴到此处。
  • 这是网址:http://localhost:3000/admin/works/search?utf8=%E2%9C%93&search%5Btype%5D=editions&search%5Bfilter%5D=filter_by&search%5Bvalue%5D=text

标签: css ruby-on-rails params


【解决方案1】:

这是因为当表单加载时 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'

【讨论】:

  • 谢谢迈克!我使用了最后一个解决方案并且工作了。对不起,我把条件中的参数拼错了,现在它已经修复了。
【解决方案2】:

这是因为params[:search]nil 而你正在调用params[:search][:filter]

试试:

invisible = params[:search].present? ? (params[:search][:filter].present? ? '' : 'invisible') : ''

【讨论】:

    【解决方案3】:
    ...
    
    - invisible = params[:search].try(:[], :filter).blank? ? 'invisible' : ''
    
    ...
    

    【讨论】:

      猜你喜欢
      • 2013-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-03
      • 2013-09-22
      • 1970-01-01
      相关资源
      最近更新 更多