Rails Simpleform与非模型输入

luc*_*nte 17 ruby forms ruby-on-rails 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 %>
Run Code Online (Sandbox Code Playgroud)

但这会产生Method not found: attr_not_in_obj错误.我显然可以使用标准的rails帮助器,但是我会错过输入周围的所有simpleform HTML,并且复制看起来不太合适.

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

jdo*_*doe 23

你为什么不加:

attr_accessor :attr
Run Code Online (Sandbox Code Playgroud)

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

<%= f.input :attr %>
Run Code Online (Sandbox Code Playgroud)

应该管用.

要么

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

<%= f.input :attr, input_html: {value: 'something'}  %>
Run Code Online (Sandbox Code Playgroud)

  • 但它并不属于模型,它只是控制器应该知道的东西. (6认同)
  • @lucasclemente它解决了这个问题,因为如果为它指定了一些值,就不会对`@obj`执行`attr`方法.如果这困扰你,把'''`(空字符串)而不是''某事'.就试一试吧. (4认同)

Rya*_*dge 11

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

<%= simple_form_for @obj do |f| %>
  <%= f.input :name %>
  <%= f.input :attr do %>
    <%= text_field_tag 'attr' %>
  <% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)