我试图将url
和variable
传递给Rails中的部分表单。
方法#1:
这样做有效,但我不想将post_create_path
硬编码到表单中,以便它也可以用于#update。
new.html.erb
<%= render partial: 'shared/form', locals: { form: @form } %>
_form.html.erb
<%= form_for form, url: post_create_path do |f| %>
...
<% end %>
方法#2:
这不起作用。
new.html.erb
<%= render partial: 'shared/form', locals: { form: @form, url: post_create_path } %>
_form.html.erb
<%= form_for form, url: url do |f| %>
...
<% end %>
错误:
未定义的局部变量或方法`url&#39;对于#&lt;#:0x007f8d4d831fd0&gt;
我也尝试过:
url
而不是url:url
,但却收到同样的错误。我现在已经尝试将这项工作工作了几个小时,感觉我已经没有选择尝试了。任何帮助指出我做错了什么都会非常感激!
答案 0 :(得分:5)
您可以通过在编辑和新视图模板上打开form_for
来使用不同的操作,然后将表单对象传递给包含表单中创建和更新共有的所有字段的部分
new.html.erb
<%= form_for @post, :url => { :action => "create" } do |form| %>
<%= render partial: 'shared/form', locals: { f: form } %>
edit.html.erb
<%= form_for @post, :url => { :action => "update" } do |form| %>
<%= render partial: 'shared/form', locals: { f: form } %>
共享/ _form.html.erb
<%= f.text_field :title %>
...
<%= f.submit "Save" %>
<% end %>
答案 1 :(得分:0)
使用locals
哈希作为form_for
参数:
# new.html.erb
<%= render partial: 'shared/form', form: @form, locals: { url: post_create_path, method: :post} %>
# edit.html.erb
<%= render partial: 'shared/form', form: @form, locals: { url: post_update_path, method: :put} %>
# _form.html.erb
<%= form_for form, locals do |f| %>
...
<% end %>
locals
只是一个哈希,您可以给它指定任何名称(例如vars
)。然后在视图和表单中一致使用它。
答案 2 :(得分:0)
在使用命名间隔的路线处理Rails应用程序时,我遇到了同样的挑战,但是sa77's answer帮助了我。
只需添加即可。
我的routes
文件是这样的:
Rails.application.routes.draw do
namespace :users do
resources :students
end
end
因此,我的new.html.erb
进行了如下修改:
<h1>New User</h1>
<%= form_with(model: @user, url: users_students_path, local: true) do |form| %>
<%= render partial: 'form', user: @user, locals: { form: form } %>
<% end %>
<%= link_to 'Back', users_students_path %>
我的edit.html.erb
修改如下:
<h1>Editing User</h1>
<%= form_with(model: @user, url: users_student_path(@user), local: true) do |form| %>
<%= render partial: 'form', user: @user, locals: { form: form } %>
<% end %>
<%= link_to 'Show', users_student_path %> |
<%= link_to 'Back', users_students_path %>
然后将我的_form.html.erb
文件进行如下修改:
<div class="field">
<%= form.label :email %>
<%= form.text_field :email %>
</div>
<div class="field">
<%= form.label :password %>
<%= form.text_field :password %>
</div>
<div class="actions">
<%= form.submit %>
</div>
仅此而已。
我希望这会有所帮助