【问题标题】:Rails Simpleform with non-model inputs带有非模型输入的 Rails Simpleform
【发布时间】:2012-07-05 17:32:52
【问题描述】:

我有一个使用 simpleform 的普通表单。现在我想添加一个在模型中没有任何对应字段的输入,它将由控制器处理。我试过了

<%= simple_form_for @obj do |f| %>
  <%= f.input :name %>
  <%= f.input :attr, as: :string %>   <-- should just send "attr" as post data
<% end %>

但这会产生Method not found: attr_not_in_obj 错误。我显然可以使用标准的 rails 助手,但是我会错过输入周围的所有简单 HTML,并且复制似乎不太正确。

简而言之: 我正在寻找类似简单版本的 rails 标签助手之类的东西,与模型没有任何联系。如何添加与模型属性不对应的输入?

【问题讨论】:

    标签: ruby-on-rails ruby forms simple-form


    【解决方案1】:

    你为什么不添加:

    attr_accessor :attr
    

    你的模型的类定义?这样你的代码:

    <%= f.input :attr %>
    

    应该可以。

    如果此解决方案不合适,您始终可以直接将一些值传递给您的 input 方法:

    <%= f.input :attr, input_html: {value: 'something'}  %>
    

    【讨论】:

    • 但它并不真正属于模型,这是只有控制器应该知道的东西。
    • @lucasclemente 更新了我的答案。
    • 第二个选项只是默认值,这对问题有什么影响?
    • 我正在寻找类似简单版本的 rails 标签助手,与模型没有任何连接。
    • @lucasclemente 它解决了这个问题,因为如果您为它指定了一些值,则不会在 @obj 上执行对 attr 方法的调用。如果这让您感到困扰,请使用 ''(空字符串)而不是 'something'。试试看吧。
    【解决方案2】:

    假设您想使用 Rails 表单助手,但仍将其包装在 SimpleForm 中?你可以通过这样的块调用输入:

    <%= simple_form_for @obj do |f| %>
      <%= f.input :name %>
      <%= f.input :attr do %>
        <%= text_field_tag 'attr' %>
      <% end %>
    <% end %>
    

    【讨论】:

    • 这是个好主意,但不会设置所有相关的 simple_form css 类,如 booleanoptional 和正确的 id。不过,它建立了一个适当的标签。
    【解决方案3】:

    是的,以下引用来自simple_form wiki

    字符串输入

    app/inputs/fake_input.rb:

    class FakeInput < SimpleForm::Inputs::StringInput
      # This method only create a basic input without reading any value from object
      def input(wrapper_options = nil)
        merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)
        template.text_field_tag(attribute_name, nil, merged_input_options)
      end
    end
    

    那你就可以&lt;%= f.input :thing, as: :fake %&gt;

    【讨论】:

      猜你喜欢
      • 2011-07-08
      • 2012-06-17
      • 2012-06-16
      • 1970-01-01
      • 1970-01-01
      • 2019-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多