我有一个名为orders
的控制器。在该控制器中,有new
和create
操作。用户可以从订单/新页面创建订单,但我也希望他们能够从主页创建订单。这是我到目前为止尝试做的事情
<%= 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
,并且由于某种原因没有传递信息。
有什么建议吗? 提前致谢
答案 0 :(得分:2)
<%= 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' %>
完成工作:)