2015-07-19 85 views
0

我的form_for提交按钮只能部分工作;数据保存在数据库中,但重定向失败。以下是该表单的相关代码:form_for提交按钮不适用于轨道上的红宝石

app/views/orders/new.html.erb 

<h1>Menu</h1> 
<%= link_to "Back to channel", current_channel_path %> 
<div class="container"> 
<table class="table table-striped"> 
    <thead> 
     <tr> 
     <th>Meal</th> 
     <th>Price</th> 
    </tr>   
    </thead> 
<tbody> 
    <% @menu_items.each do |t| %> 
    <p> 
    <tr> 
     <td><%= t.name %></td> 
     <td><%= number_to_currency(t.price) %></td> 

     <%= form_for (@order), url: orders_path, remote: true do |f| %> 
     <td><%= f.number_field :quantity, value: 1, class: "form-control", min: 1 %></td> 
     <%= f.hidden_field :meal, :value => t.name %> 
     <%= f.hidden_field :unit_price, :value => t.price %> 

     <td><%= f.submit "Order", class: "btn btn-primary" %></td> 
     <% end %> 
    </tr> 
    </p> 
    <% end %> 
</tbody> 
</div> 

在此提供的routes.rb

Rails.application.routes.draw do 
#For Orders 
get 'orders' => 'orders#new' 
post 'orders' => 'orders#create' 
get 'all_orders' => 'orders#show' 

resources :users 
resources :orders 

这里的代码订单

def new 
    @menu_items = MenuItem.all 
    @order = Order.new 
end 

def create 
    @order = current_channel.orders.build(order_params) 
    @order.user = current_user 

    if @order.save 
    flash.now[:success] = "Order has been recorded!" 
    redirect_to all_orders_path 
    else 
    flash.now[:danger] = "Order was not recorded!" 
    render 'new' 
    end 
end 

我的相关代码阅读提交按钮可能无法正常工作,因为它嵌套在表格中。我试图把表格放在表格之外,但提交仍然不会重定向;然而,提交按钮会在两种情况下在订单数据库中创建记录。任何想法为什么这是这种情况?预先感谢任何帮助!

+0

你是什么意思重定向失败? – Pavan

+1

您正在发出ajax请求。你需要create.js.erb文件不重定向。 – Athar

+0

错误消息将有助于诊断 – nextstep

回答

1

您需要为上面未列出的索引路径设置路由。如果你遵循标准的粗俗惯例,你应该在你的路径文件中使用“resources :orders”,这将生成你需要的后/放/删除/获得路由。那么你的重定向将起作用。

+0

我没有把资源:订单在我的路线文件,但它不工作。 – chocomousse

+0

它必须是“资源:订单”。通知资源是复数。而且,由于rails会查找第一个匹配的路由并执行,因此您必须将此路由移动到您手动创建的其他路径的上方。最后,在您的控制器中,您必须将redirect_to“路径”更改为:redirect_to order_path(:id)。如果你想看到所有的订单,而不是你创建的那个,你应该重定向到orders_path –