Ruby on rails Rails发送到另一个控制器
我有一个名为订单的控制器。在该控制器中有一个Ruby on rails Rails发送到另一个控制器,ruby-on-rails,ruby,ruby-on-rails-3,forms,Ruby On Rails,Ruby,Ruby On Rails 3,Forms,我有一个名为订单的控制器。在该控制器中有一个new和create操作。用户可以从订单/新页面创建订单,但我也希望他们能够从主页创建订单。这是我到目前为止一直在努力做的事情 <%= form_tag :controller => "orders", :action => "create" do %> <%= text_field_tag :first_name, 'Test1' %> <%= text_field_tag :last_name, '
new
和create
操作。用户可以从订单/新页面创建订单,但我也希望他们能够从主页创建订单。这是我到目前为止一直在努力做的事情
<%= form_tag :controller => "orders", :action => "create" do %>
<%= text_field_tag :first_name, 'Test1' %>
<%= text_field_tag :last_name, 'Test2' %>
<%= submit_tag %>
<% end %>
“订单”,:action=>“创建”do%>
但是,它拒绝了这些信息,并将我带回了orders/new
页面。它拒绝它的原因是因为我有一个验证这两个字段上是否存在,并且由于某种原因没有传递信息
有什么建议吗?
提前感谢您将发布到该控制器,但表单是通用的(未分配给与表单_for类似的模型),因此参数仅作为参数[:first_name]params[:last_name]传入。在这种情况下,您必须手动将这些值映射到订单模型的新实例。与您的想法相反。您的first_name和last_name参数实际上被传递到create操作中。只是他们正在以一种你意想不到的方式通过
在日志文件中检查创建操作,您将在那里看到它们
您的问题在于字段没有嵌套在order参数中,而这正是创建操作所期望的
我的意思是,您的创建操作将需要params[:order],而实际上您在创建操作中需要params[:first_name]和params[:second_name],这不是您想要做的
解决方案是什么
将字段嵌套在顺序散列中,如下所示
<%= text_field_tag :order[:first_name], 'Test1' %>
<%= text_field_tag :order[:last_name], 'Test2' %>
工作完成:)@Kreek很好地解释了这个问题。比手动处理这些参数更好的方法是如下更改表单:
<%= form_for Order.new do |f| %>
<%= f.text_field :first_name %>
<%= f.text_fiels :last_name %>
<%= f.submit %>
<% end %>
这里有3个不同的答案,但它们都是一回事。拿你的选择:)很好,但是我会在呈现这个表单的动作中设置对象,并从那里引用它。这只是一个比“你必须这样做”更被接受的标准。这很好,但问题是关于使用form_标签的,这也是可以使用的。订单创建操作将处理订单。新建。只需将文本_字段嵌套在订单散列中