SimpleForm没有for(非模型forms)
是否可以使用简单的forms(通过:Plataformatec)没有模型?
https://github.com/plataformatec/simple_form
您可以使用:symbol
作为第一个参数。
<%= simple_form_for :user, url: users_path do |f| %> <%= f.input :name, as: :string %> ... <% end %>
它会输出这样的东西:
<form novalidate="novalidate" class="simple_form user" action="/users" accept-charset="UTF-8" method="post"> ... <div class="input string required user_name"> <label class="string required" for="user_name"> <abbr title="required">*</abbr> Name </label> <input class="string required" type="text" name="user[name]" id="user_name" /> </div> ... </form>
不幸的是,simple_form依赖于使用模型。 从本质上来说,如果使用类似simple_form_tag和input_tag方法的方法,那么它们的效果就好像它们的rails * _tag助手一样。 在此之前,有一个简单的工作。
使用符号而不是表单中的类,并显式传递该值以防止simple_form尝试访问模型属性。
<%= simple_form_for :user, :url => '/users' do |f| %> <%= f.text_field :name, input_html: { value: nil } %> <% end %>
这将避免undefined method 'name' for User
错误undefined method 'name' for User
。
您还可以在表单模型中使用模型之外的字段,使用simple_fields_for像这样:
<%= simple_form_for @user do |f| %> <%= f.input :name %> <%= simple_fields_for :no_model_fields do |n| %> <%= n.input :other_field %> <% end %> <% end %>
这是简单实用的解决scheme,因为您可以从不同的模型创build不同types的字段,也可以不使用模型
上面的所有方法仍然会将表单数据嵌套在“user”或者作为第一个parameter passing的任何符号中。 这很烦人
为了模仿simple_form的风格/好处,但是删除对象/符号依赖和强制数据嵌套,你可以创build一个partial。
HAML
例子:
表格视图:
= form_tag("path/to/action", method: "POST") do = render "path/to/partial/field", type: "string", required: true, item: "first_name"
field
部分:
- required_string = required ? "required" : "" %div{class: "input #{type} #{required_string} #{item}"} %label{class: "#{type} #{required_string}", for: "#{item}"} - if required %abbr{title: "required"} * = t("application.#{item}") %input{name: "#{item}", | placeholder: t("application.#{item}"), | type: "#{type}", | required: required, | "aria-required" => "#{required}" }
您也可以传递一个:symbol
而不是simple_form_for
作为simple_form_for
参数。
<%= simple_form_for :email, :url => '/post_email' do |f| %> <%= f.input :subject, :as => :string %> <% end %>
哪个会输出:
<form method="post" class="simple_form email" action="/post_email" accept-charset="UTF-8"> ... <input type="text" size="30" name="email[subject]" id="email_subject"> </form>
请注意以下退步:
- 您将无法利用自动模型validation
- 需要明确定义
:url
和每个input
的types
- 用于客户端表单validation和交互的最佳JavaScript解决scheme?
- CRUD网页表单devise的最佳范例
- jquery / Ajax表单提交(enctype =“multipart / form-data”)。 为什么'contentType:False'在PHP中导致未定义的索引?
- 如何使form_rest()不显示与Symfony2的字段?
- Rails表单中的多个对象
- 我如何为SimpleForm编写一个更干净的dateselect器input
- 从textarea删除所有样式(边框,发光)
- 如何在不redirect的情况下提交html表单?
- 使用simple_forminput的默认值