Ruby on rails 在formtastic url中传递可选参数

Ruby on rails 在formtastic url中传递可选参数,ruby-on-rails,ruby,formtastic,Ruby On Rails,Ruby,Formtastic,我有一个新动作的rails视图。我正在使用formtastic生成表单,并且可以选择使用一个可能已传递给控制器的形式模板 我要做的是确保在提交表单时将这个形式id传递给create方法 我已经找到了一种方法,但我想知道这是否有点黑客,是否没有更干净、更像ruby的方法: <% params = {:proforma_id => @proforma.id} unless @proforma.nil? %> <%= semantic_form_for @document, :

我有一个新动作的rails视图。我正在使用formtastic生成表单,并且可以选择使用一个可能已传递给控制器的形式模板

我要做的是确保在提交表单时将这个形式id传递给create方法

我已经找到了一种方法,但我想知道这是否有点黑客,是否没有更干净、更像ruby的方法:

<% params = {:proforma_id => @proforma.id} unless @proforma.nil? %>
<%= semantic_form_for @document, :url => documents_path(params) do |f| %>
@proforma.id}除非@proforma.nil?%>
文档路径(参数)do | f |%>

也许我应该把params行放在控制器中?

有两种方法可以传递它,这取决于你是想在URL中传递它,还是想在POST数据中传递它

正如您所发现的,第一种方法是在url参数中传递它。您可以在控制器中设置该变量,但您可能会侥幸逃脱

<%= semantic_form_for @document, :url => documents_path(:proforma_id => @proforma.try(:id)) do |f| %>
documents_path(:proforma_id=>@proforma.try(:id))do|f|%>
如果额外的参数是nill,它就不会出现,IIRC

另一个选项是将其作为隐藏变量放入表单中:

<%= hidden_field_tag :proforma_id, @proforma.try(:id) %>

看起来像。try(:id)将是理想的选择,适用于这种情况和许多其他情况!