SimpleForm没有(非模型形式)

Edw*_*ord 73 ruby-on-rails ruby-on-rails-3 simple-form

是否可以在没有模型的情况下使用Simple Form(by:Plataformatec)?

https://github.com/plataformatec/simple_form

hta*_*ata 117

您可以使用:symbol第一个参数.

<%= simple_form_for :user, url: users_path do |f| %>
  <%= f.input :name, as: :string %>
  ...
<% end %>
Run Code Online (Sandbox Code Playgroud)

它将输出如下内容:

<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>
Run Code Online (Sandbox Code Playgroud)

  • 我不明白为什么这是接受的答案,因为答案是错的. (14认同)
  • 此选项仍使用封面下的模型.符号应与模型名称匹配,它将解析为模型并创建新模型并在每个字段上使用它,因此表单字段中使用的属性实际上应存在于模型中. (10认同)
  • 奇怪的是,这正是我想做的事情并没有成功.你的例子给出了一个"未定义方法"的名字?为nil:至少对我来说是NilClass`. (8认同)
  • @toxaq也许这不是一个好例子.您可以使用`f.input:name,:as =>:string`并生成带有标签,提示等的常用表单. (3认同)

Mig*_*ero 16

不幸的是,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 %>
Run Code Online (Sandbox Code Playgroud)

这样可以避免undefined method 'name' for User错误.

  • 这对我有用:<%= f.input:create_key,input_html:{value:nil},required:true,提示:"仅限邀请,请参阅电子邮件以获取密钥"%> (2认同)

jac*_*614 9

您还可以在表单模型中使用模型外部的字段,使用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 %>
Run Code Online (Sandbox Code Playgroud)

这是一个简单实用的解决方案,因为您可以从不同的模型创建不同类型的字段或不使用模型