Rails Simpleform与非模型输入

时间:2012-07-05 17:32:53

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

我有一个使用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帮助器,但是我会错过输入周围的所有simpleform HTML,并且复制看起来不太合适。

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

3 个答案:

答案 0 :(得分:22)

为什么不添加:

attr_accessor :attr

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

<%= f.input :attr %>

应该有用。

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

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

答案 1 :(得分:11)

假设你想使用rails form helper但仍然将它包装在SimpleForm中?你可以通过这样的块调用输入:

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

答案 2 :(得分:0)

是,以下是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 %>