[英]DRY Rails Forms - Form Partials
我在重复使用Rails表单代码时遇到问题。 当我将它们放在局部时,它们会抛出NoMethodError,并且我无法弄清楚如何使它们成为DRYer。
admin / exam_centers / edit.html.erb =>
<%= simple_form_for(@exam_center, url: admin_exam_center_path(@exam_center)) do |f| %>
<%= f.input :city_id, collection:City.all, label: 'Şehir Seçiniz', label_method: :name %>
<%= f.input :address, label: 'Adres' %>
<%= f.input :building, label: 'Bina' %>
<%= f.button :submit, "Kaydet", :class => "btn btn-info" %>
<% end %>
注意:admin_exam_center_path(@exam_center)
admin / exam_centers / new.html.erb =>
<%= simple_form_for(@exam_center, url: admin_exam_centers_path(@exam_center)) do |f| %>
<%= f.input :city_id, collection:City.all, label: 'Şehir Seçiniz', label_method: :name %>
<%= f.input :address, label: 'Adres' %>
<%= f.input :building, label: 'Bina' %>
<%= f.button :submit, "Kaydet", :class => "btn btn-info" %>
<% end %>
注意:admin_exam_centers_path(@exam_center)
他们像这样完美地工作。 但是,当我将它们放在部分中时(如您在下面看到的那样),new.html.erb页将引发“未定义方法exam_centers_path”错误,edit.html.erb页将引发“未定义方法exam_center_path”错误。 如何制作DRYer表格?
_form.html.erb =>
<%= simple_form_for(@exam_center) do |f| %>
<%= f.input :city_id, collection:City.all, label: 'Şehir Seçiniz', label_method: :name %>
<%= f.input :address, label: 'Adres' %>
<%= f.input :building, label: 'Bina' %>
<%= f.button :submit, "Kaydet", :class => "btn btn-info" %>
<% end %>
edit.html.erb =>
<%= render 'admin/exam_centers/form' %>
new.html.erb =>
<%= render 'admin/exam_centers/form' %>
顺便说一下,路由文件=>
namespace :admin do
resources :exam_centers, except: :show
resources :exam_languages, except: :show
end
看来您只需要使用多态网址构建器来指定路由的:admin
部分即可。 尝试像这样指定表单助手:
<%= simple_form_for([:admin, @exam_center]) do |f| %>
这将使Rails可以在生成其余路由之前添加到命名路由的admin_
部分。
您只需将公用部分放在局部中,这样就可以执行以下操作:
new.html.erb
<%= simple_form_for(@exam_center, url: admin_exam_centers_path(@exam_center)) do |f| %>
<%= render partial: "form", locals: {:f => f} %>
<% end %>
edit.html.erb
<%= simple_form_for(@exam_center, url: admin_exam_center_path(@exam_center)) do |f| %>
<%= render partial: "form", locals: {f: "f"} %>
<% end %>
_form.html.erb
<%= f.input :city_id, collection:City.all, label: 'Şehir Seçiniz', label_method: :name %>
<%= f.input :address, label: 'Adres' %>
<%= f.input :building, label: 'Bina' %>
<%= f.button :submit, "Kaydet", :class => "btn btn-info" %>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.