我正在使用报价模型将报价详细信息保存到数据库中。
我的报价如下所示:
class Offer < ApplicationRecord
belongs_to :company
belongs_to :product
belongs_to :clerk, optional: true
end
订单_index.html.erb部分在公司的show.html.erb视图和产品的show.html.erb视图上呈现。在订单_index.html.erb部分的底部有一个用于创建新报价的按钮:
<% if @company %>
<%= link_to 'new offer', new_offer_path(@company, @offer, :source => "company"), :class => "btn btn-primary" %>
<% elsif @product %>
<%= link_to 'new offer', new_offer_path(@product, @offer, :source => "product"), :class => "btn btn-primary" %>
<% end %>
我保存到源参数以在控制器中识别用户单击按钮的页面。
为了处理这些不同的要求,我构建了两种不同的表单,它们在我的new.html.erb中呈现
<% if params[:source] == "company" || params[:product_id].nil? %>
<%= render 'form_from_company', offer: @offer, company: @company %>
<%= link_to 'Zurück', company_path(@company), :class => "btn btn-secondary" %>
<% elsif params[:source] == "product"%>
<%= render 'form_from_product', offer: @offer, product: @product %>
<%= link_to 'Zurück', product_path(@product), :class => "btn btn-secondary" %>
<% end %>
我的表格如下所示(form_from_company):
<%= simple_form_for [@offer] do |f| %>
<%= hidden_field_tag :company_id, @company.id %>
<%= f.association :product, prompt: "Produkt auswählen", label_method: :name_and_product_autocomplete, input_html: {id: 'dropdown-choice-select'} %>
<%= f.association :clerk, label_method: :full_name, collection: Clerk.where(company_id: @company.id), prompt: "Mitarbeiter auswählen" %>
...
<%= f.button :submit, class: "btn btn-primary" %>
<% end %>
我的其他表单如下所示(form_from_product):
<%= simple_form_for [@offer] do |f| %>
<%= hidden_field_tag :product_id, @product.id %>
<%= f.association :company, prompt: "Firma auswählen", label_method: :name_and_company_autocomplete, input_html: {id: 'dropdown-choice-select'}%>
...
<%= f.button :submit, class: "btn btn-primary" %>
<% end %>
我什至让它像这样工作,但只是为了正确输入。因此,如果用户输入了未得到验证的错误数据,新表单将再次呈现以向他展示他缺少的内容,这就是我的问题。
在他第一次按下提交按钮后,没有包含 params[:source],它只显示“空”的新页面,因为只有在有 params[:source] 时才会呈现表单
我觉得应该有一个更好的解决方案,但我不知道如何以正确的方式去做。
有人可以给我一个关于如何处理这个问题的提示或链接吗?