如何在Rails中将url路径传递给form_for partial?

tim*_*xyz 2 forms ruby-on-rails

我想传递一个urlvariable在Rails的部分的形式.


方法#1:
这是有效的,但我不想硬编码post_create_path到表单中,因此它也可以用于#update.

new.html.erb

<%= render partial: 'shared/form', locals: { form: @form } %>
Run Code Online (Sandbox Code Playgroud)

_form.html.erb

<%= form_for form, url: post_create_path do |f| %>
...
<% end %>
Run Code Online (Sandbox Code Playgroud)

方法#2:
这不起作用.

new.html.erb

<%= render partial: 'shared/form', locals: { form: @form, url: post_create_path } %>
Run Code Online (Sandbox Code Playgroud)

_form.html.erb

<%= form_for form, url: url do |f| %>
...
<% end %>
Run Code Online (Sandbox Code Playgroud)

错误:

未定义的局部变量或方法`URL"为#<#:0x007f8d4d831fd0>

我也尝试过:

  1. 只是url而不是url:url得到相同的错误.
  2. 遵循这个主题:如何将url传递给partial/form?

我一直试图让这项工作工作几个小时,感觉我已经没有选择尝试了.任何帮助指出我做错了什么都会非常感激!

sa7*_*a77 5

您可以通过打开form_for编辑和新视图模板来使用不同的操作,然后将表单对象传递给包含表单的所有字段的部分,这些字段对于创建和更新都是通用的

new.html.erb

<%= form_for @post, :url => { :action => "create" } do |form| %>
  <%= render partial: 'shared/form', locals: { f: form } %>
Run Code Online (Sandbox Code Playgroud)

edit.html.erb

<%= form_for @post, :url => { :action => "update" } do |form| %>
  <%= render partial: 'shared/form', locals: { f: form } %>
Run Code Online (Sandbox Code Playgroud)

共享/ _form.html.erb

  <%= f.text_field :title %>
  ...
  <%= f.submit "Save" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)