Ruby on rails 将自定义窗体值传递给自定义控制器操作
在Rails中,我有一个自定义控制器操作,需要接受表单中的一些参数:Ruby on rails 将自定义窗体值传递给自定义控制器操作,ruby-on-rails,forms,Ruby On Rails,Forms,在Rails中,我有一个自定义控制器操作,需要接受表单中的一些参数: def update_ordid # Get the active exchange @exchange = Exchange.find(params[:id]) # Decide which order ID field to update active_order_field = params[:ordfld] # Save the order ID order_id = params[:ordid] if
def update_ordid
# Get the active exchange
@exchange = Exchange.find(params[:id])
# Decide which order ID field to update
active_order_field = params[:ordfld]
# Save the order ID
order_id = params[:ordid]
if active_order_field == 1 then
@exchange.order_id_1 = order_id
else
@exchange.order_id_2 = order_id
end
@active_exchange.save
respond_with(@exchange)
end
由于这些参数不是exchange表中的实际数据字段,因此我通常会使用以下链接来调用该操作:
link_to "Update Order ID", update_ordid_exchange(ordfld: value_from_form, ordid: value_from_form), :method => :post
因为在这种情况下,这些参数的值需要由用户输入填充,所以我创建了以下表单来传递数据:
<%= form_for(@exchange, url: update_ordid_exchange_path) do |f| %>
<div class="field">
<%= f.label :ordid, "Order ID" %><br>
<%= f.text_field :ordid, class: "form-control" %>
</div>
<% if @isrequestor == true %>
<%f.hidden_field :ordfld, :value => "1" %>
<% else %>
<%f.hidden_field :ordfld, :value => "2" %>
<% end %>
<div class="actions">
<%= f.submit "Submit", class: "btn btn-primary" %>
</div>
<% end %>
"1" %>
"2" %>
当我试图呈现此表单时,收到错误:未定义的方法'ordid'for#
在研究这个问题时,我发现我可以通过将text_字段行更改为:
<%= f.text_field_tag :ordid, class: "form-control" %>
在解决初始错误的同时,它会抛出一个新错误:未定义的方法'text\u field\u tag'for#
关于我做错了什么有什么想法吗?我自己对这一点有点陌生,但我相信这是因为您从表单中调用了“text\u field\u tag”,而不是表单标记生成器对象。请尝试将对象的窗体保留为:
<%= text_field_tag :ordid, class: "form-control" %>
我自己对此有点陌生,但我相信这是因为您从表单中调用了“text\u field\u tag”,而不是表单标记生成器对象。请尝试将对象的窗体保留为:
<%= text_field_tag :ordid, class: "form-control" %>
由于表单元素不表示模型的属性,因此不能对使用
form\u。使用表单标签
<%= form_tag(update_ordid_exchange_path, :method => :patch) do%>
<div class="field">
<%= label_tag "Order ID" %><br>
<%= text_field_tag :ordid, class: "form-control" %>
</div>
<% if @isrequestor == true %>
<%= hidden_field_tag :ordfld, "1" %>
<% else %>
<%= hidden_field_tag :ordfld, "2" %>
<% end %>
<div class="actions">
<%= submit_tag "Submit", class: "btn btn-primary" %>
</div>
<%end%>
:补丁)do%>
文件
由于表单元素不表示模型的属性,因此不能对
使用form\u。使用表单标签
<%= form_tag(update_ordid_exchange_path, :method => :patch) do%>
<div class="field">
<%= label_tag "Order ID" %><br>
<%= text_field_tag :ordid, class: "form-control" %>
</div>
<% if @isrequestor == true %>
<%= hidden_field_tag :ordfld, "1" %>
<% else %>
<%= hidden_field_tag :ordfld, "2" %>
<% end %>
<div class="actions">
<%= submit_tag "Submit", class: "btn btn-primary" %>
</div>
<%end%>
:补丁)do%>
文件
\u标签
后缀不用于表单
。好的,我还应该做些什么来允许表单传递参数吗?你能公布你的全部错误吗。\u标签
后缀不用于表单
。好的,我还应该做些什么来允许表单传递参数吗?你能发布你的整个错误吗?谢谢,我尝试了这段代码,但得到了错误:没有路由匹配[post]“/exchanges/2/update\u ordid”我还需要修改控制器中的任何内容吗?我的路由是:resources:exchanges Do patch:update\u ordid,on::member End默认情况下,表单提交将是一个post请求。由于您已经定义了修补程序的路径,因此必须以形式_tagThank显式指定该方法!这使我与第一个答案的观点相同。这一行肯定仍然有问题:“1”%>因为“1”的值没有传递给控制器。根据hidden_field_标记的文档,value是第二个参数。不是hashThank,我尝试了这段代码,但是得到了一个错误:没有路由匹配[POST]“/exchanges/2/update\u ordid”我也需要修改控制器中的任何内容吗?我的路由是:resources:exchanges Do patch:update\u ordid,on::member end默认情况下,表单提交将是一个POST请求。由于您已经定义了修补程序的路径,因此必须以形式_tagThank显式指定该方法!这使我与第一个答案的观点相同。这一行肯定仍然有问题:“1”%>因为“1”的值没有传递给控制器。根据hidden_field_标记的文档,value是第二个参数。在这种方法中,虽然您已经解决了它,但它不是hashi猜想的,因为:ordid
是表中的一列,最好在表单中使用
,这使它非常接近正常工作,尽管隐藏字段肯定仍然存在问题,因为:ordfld没有将其值传递给控制器。“1”%>(Rahul,:ordid实际上不是表中的一列。)哦,如果它不是数据库中的一列,那么这将很好。您可以为
绑定form\u,只使用数据库中存在的列。我想在这种方法中,虽然您已经解决了它,但它不是正确的方法,因为:ordid
是表中的一列,最好在您的表单中使用
,这使它非常接近正常工作,尽管隐藏字段仍然存在问题,因为:ordfld没有将其值传递给控制器。“1”%>(Rahul,:ordid实际上不是表中的一列。)哦,如果它不是数据库中的一列,那么这将很好。只能使用数据库中存在的列为
绑定表单。