更改参数名称FORM_WITH VS FORM_FOR

时间:2019-02-07 22:38:08

标签: ruby-on-rails ruby-on-rails-5 form-for

我正在使用rails 5和form_with助手。我的代码在使用Form_for时有效,但在Form_with上无效。 :as参数对Form_with无效吗?

查看

<%= form_with(model: @user_wizard , :as => :user_wizard, url: validate_step_wizard_path, local: true, builder: BsFormBuilder) do |f| %>

型号

def user_wizard_params
   params.require(:user_wizard).permit( :name )
 end

但是,每次我尝试提交表单时,参数都会提交:

{"utf8"=>"✓",
 "authenticity_token"=>"LvRDsdfsdfsd3V0l4NLg14q2JWBdwkDPqUIu2l7SXDiioCtvMwW6Bv3ss/LPSS9+bdxiPIzjg==",
 "current_step"=>"step1",
 "wizard_user_step1"=>
  {"name"=>"Name"}
}

我一直在关注。.https://medium.com/@nicolasblanco/developing-a-wizard-or-multi-steps-forms-in-rails-d2f3b7c692ce

但是,我的代码使用Form_with,而他们使用Form_for。我不知道有什么区别。

1 个答案:

答案 0 :(得分:0)

form_for 使用基础模型实例,例如此处@post作为模型

<%= form_for @post do |form| %>
 <%= form.text_field :author %>
 <%= form.submit “Create” %>
<% end %>

form_tag 是表单帮助器,但是don't have基础模型,您应该使用text_field_tag而不是text_field

<%= form_tag “/posts” do %>
 <%= text_field_tag “post[author]” %>
 <%= submit_tag “Create” %>
<% end %>

form_with 将结合form_for和form_tag,稍后这两个将与form_with结合

此处使用form_with实现form_for和form_tag,如下所示, 如果通过模型传递form_with,它将作为form_for使用,但是如果传递url,它将作为form_tag

<%= form_with model: @post do |form| %>
 <%= form.text_field :author %>
 <%= form.submit “Create” %>
<% end %>

<%= form_with url: “/posts” do |form| %>
 <%= form.text_field :author %>
 <%= form.submit “Create” %>
<% end %>

与此同时,您的问题没有选项as,您可以从此链接检查more detail options