Rails发布到另一个控制器

时间:2011-08-05 00:11:06

标签: ruby-on-rails ruby ruby-on-rails-3 forms

我有一个名为orders的控制器。在该控制器中,有newcreate操作。用户可以从订单/新页面创建订单,但我也希望他们能够从主页创建订单。这是我到目前为止尝试做的事情

<%= form_tag :controller => "orders", :action => "create" do %>
  <%= text_field_tag :first_name, 'Test1' %>
  <%= text_field_tag :last_name, 'Test2' %>
  <%= submit_tag %>
<% end %>

然而,它拒绝了这些信息并将我带回orders/new页面。拒绝它的原因是因为我在这两个字段上有一个validates_presence_of,并且由于某种原因没有传递信息。

有什么建议吗? 提前致谢

3 个答案:

答案 0 :(得分:2)

@Kreek,很好地解释了这个问题。比手动处理这些参数更好的方法是改变你的形式:

<%= form_for Order.new do |f| %>
  <%= f.text_field :first_name %>
  <%= f.text_fiels :last_name %>
  <%= f.submit %>
<% end %>

答案 1 :(得分:1)

您正在向该控制器发布但该表单是通用的(未分配给与form_for类似的模型),因此params仅作为params [:first_name] params [:last_name]进入。在这种情况下,您需要手动将这些值映射到Order模型的新实例。

答案 2 :(得分:0)

与您的信仰相反。您的first_name和last_name参数实际上已传递到create操作中。只是他们以你没想到的方式被传递 在您的日志文件中检查您将在那里看到的创建操作。

你的问题在于这些字段没有嵌套在订单参数内,这是你的创建操作所期望的。

我的意思是,你的创建动作将期待params [:order],实际上你需要在create action中使用params [:first_name]和params [:second_name],这不是你想要做的。

解决方案?

将字段嵌套在订单哈希中,如此

  <%= text_field_tag :order[:first_name], 'Test1' %>
  <%= text_field_tag :order[:last_name], 'Test2' %>

完成工作:)