繁体   English   中英

DRY Rails表格-表格部分

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM