17

我有一个使用 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 标签助手,与模型没有任何联系。如何添加与模型属性不对应的输入?

4

3 回答 3

23

为什么不添加:

attr_accessor :attr

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

<%= f.input :attr %>

应该管用。

或者

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

<%= f.input :attr, input_html: {value: 'something'}  %>
于 2012-07-05T18:29:48.273 回答
12

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

<%= simple_form_for @obj do |f| %>
  <%= f.input :name %>
  <%= f.input :attr do %>
    <%= text_field_tag 'attr' %>
  <% end %>
<% end %>
于 2012-11-06T21:08:29.667 回答
1

是的,下面是来自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

然后你可以做<%= f.input :thing, as: :fake %>

于 2018-04-28T04:26:35.620 回答