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