【问题标题】:rails simple_form - hidden field - create?rails simple_form - 隐藏字段 - 创建?
【发布时间】:2011-03-20 21:03:51
【问题描述】:

你怎么能有一个简单表单的隐藏字段?

以下代码:

= simple_form_for @movie do |f|
  = f.hidden :title, "some value"
  = f.button :submit

导致此错误:

undefined method `hidden' for #SimpleForm::FormBuilder:0x000001042b7cd0

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 form-for hidden-field simple-form


    【解决方案1】:

    试试这个

    = f.input :title, :as => :hidden, :input_html => { :value => "some value" }
    

    【讨论】:

    • 谢谢,成功了。 = f.input :title, :as => :hidden, :input_html => { :value => "some value" }
    • 这是 simple_form 隐藏输入的方式,但是,如果只需要隐藏输入,那么只需使用 Rails 的 hidden_field 表单构建器,因为 Simple Form 继承了所有表单构建器方法。
    【解决方案2】:

    最短的!!!

    =f.hidden_field :title, :value => "some value"
    

    更短、更干燥,也许更明显。

    当然,使用 ruby​​ 1.9 和新的哈希格式,我们可以缩短 3 个字符......

    =f.hidden_field :title, value: "some value"
    

    【讨论】:

    • 或 @transaction.term_id %>
    • 这应该是公认的答案。尽管问题是关于简单形式的,但当它以更短的语法完成完全相同的事情时,没有理由使用它。
    【解决方案3】:

    正确的方法(如果你不尝试重置 hidden_​​field 输入的值)是:

    f.hidden_field :method, :value => value_of_the_hidden_field_as_it_comes_through_in_your_form
    

    :method 是在对象上调用时产生所需值的方法

    所以按照上面的例子:

    = simple_form_for @movie do |f|
      = f.hidden :title, "some value"
      = f.button :submit
    

    示例中使用的代码将重置表单传递的@movie 的值(:title)。如果您需要访问电影的值 (:title),而不是重置它,请执行以下操作:

    = simple_form_for @movie do |f|
      = f.hidden :title, :value => params[:movie][:title]
      = f.button :submit
    

    再次仅使用我的答案是您不想重置用户提交的值。

    我希望这是有道理的。

    【讨论】:

    • 对于simple_form_for,此处使用的hidden 方法将针对#<:formbuilder:0x00007ffa6cde0be8>` 引发错误undefined method hidden'
    【解决方案4】:
    = f.input_field :title, as: :hidden, value: "some value"
    

    也是一种选择。但是请注意,它会跳过为您的表单构建器定义的任何包装器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      • 1970-01-01
      • 2017-08-03
      相关资源
      最近更新 更多