导轨Simpleform与非模型输入(Rails Simpleform with non-model

2019-06-26 02:12发布

我有使用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错误。 我能明显使用标准导轨佣工,但我会想念各地输入的simpleform HTML,并复制并不十分似乎是正确。

总之:我正在寻找类似的轨道标记助手simpleform版本,但没有一个模型的任何连接。 如何添加不符合模型属性的投入?

Answer 1:

你为什么不加入:

attr_accessor :attr

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

<%= f.input :attr %>

应该管用。

要么

如果此解决方案是不适合的,你总是可以通过一些价值,您input直接方法:

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


Answer 2:

假设你想用一个导轨形式助手,但仍然把它包在SimpleForm善良? 您可以通过调用输入,象这样一个块:

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


Answer 3:

是的,下面是从报价simple_form维基

字符串输入

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 %>



文章来源: Rails Simpleform with non-model inputs