Ruby on rails 如何根据Rails 6中调用表单的位置构建具有不同输入数据的表单?

Ruby on rails 如何根据Rails 6中调用表单的位置构建具有不同输入数据的表单?,ruby-on-rails,ruby-on-rails-6,Ruby On Rails,Ruby On Rails 6,我正在使用报价模型将报价详细信息保存到数据库中 我的报价如下: class Offer < ApplicationRecord belongs_to :company belongs_to :product belongs_to :clerk, optional: true end 课程优惠“btn btn主要”%> “产品”),:类=>“btn btn主要”%> Im保存到源参数,以在控制器中标识用户单击按钮的页面 为了处理这些不同的需求,我构建了两个不同的表单,它们在我

我正在使用报价模型将报价详细信息保存到数据库中

我的报价如下:

class Offer < ApplicationRecord
  belongs_to :company
  belongs_to :product
  belongs_to :clerk, optional: true
end
课程优惠
订单\u index.html.erb部分在公司的show.html.erb视图和产品的show.html.erb视图上呈现。订单\u 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 %>

“公司”),:类别=>“btn btn主要”%>
“产品”),:类=>“btn btn主要”%>
Im保存到源参数,以在控制器中标识用户单击按钮的页面

为了处理这些不同的需求,我构建了两个不同的表单,它们在我的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 %>

“btn btn次要”%>
“btn btn次要”%>
我的表格如下所示(来自公司的表格):


...
我的另一个表单如下所示(来自产品的表单):


...
我甚至让它像这样工作,但只是为了正确的输入。 因此,如果用户输入了错误的数据,而这些数据没有得到验证,那么新表单将再次呈现,向用户显示他缺少了什么,这就是我的问题

在他第一次按下提交按钮后,没有包含参数[:source],它只显示“空”的新页面,因为只有在存在参数[:source]时才会呈现表单

我觉得应该有一个更好的解决方案,但我不知道如何用正确的方法


有人能给我一个关于如何处理这个问题的提示或链接吗?

最简单的方法是以两种形式将源添加为
隐藏的\u字段


...

...

这样,您就可以访问params[:source],您的问题就解决了。

谢谢您,哈克曼,这解决了我的问题。
<%= 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 %>
<%= 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 %>