Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails发送到另一个控制器_Ruby On Rails_Ruby_Ruby On Rails 3_Forms - Fatal编程技术网

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_标签的,这也是可以使用的。订单创建操作将处理订单。新建。只需将文本_字段嵌套在订单散列中