我一直在
undefined method 'orders_path' for #<#<Class:0x007faefee50a88>:0x007faefee414e8>
导航到我的新订单路径网址/users/1/orders/new
坚持这一点,不知道这笔交易是什么。
路线:
devise_for :users, :path => 'accounts'
resources :users, only: [:index, :show] do
resources :orders
end
root index:
<%= link_to "Create an Order", new_user_order_path(current_user.id) %>
形式:
<%= form_for([@user, @order]) do |f| %>
<%= f.hidden_field :user_id %>
<div class="form-group">
<%= f.label :name %><br />
<%= f.text_field :name, autofocus: true, class: "form-control" %>
</div>
<% end %>
新:
<h1>New Order</h1>
<%= render 'form' %>
<%= link_to 'Back', user_orders_path(@user) %>
答案 0 :(得分:2)
当你这样写:
<%= form_for(@order) do |f| %>
Rails正在寻找orders_path
,但您并没有真正拥有这样的路线,因为您已经定义了嵌套在orders
资源下的users
资源。因此,您必须将@user
和@order
都传递到以下格式:
<%= form_for([@user, @order]) do |f| %>
# your code goes here
<% end %>
如果您以这种方式编写表单,那么Rails将查找此路径:user_orders_path
将匹配您定义的路由并且将起作用,您将不再收到此错误:
undefined method 'orders_path' for #<#<Class:0x007faefee50a88>:0x007faefee414e8>
因此,这将解决您当前的问题。但是,您的new.html.erb
文件中还存在另一个问题:
<%= link_to 'Back', user_orders_path %>
您必须将@user
作为参数传递给此方法:
<%= link_to 'Back', user_orders_path(@user) %>
否则,它会再次失败。
希望这有助于解决您的问题。
答案 1 :(得分:0)
由于orders
嵌套在用户之上,因此form_for
声明需要同时包含用户和订单对象。
<%= form_for([@user, @order]) do |f| %>
您的new
模板还需要引用给定的用户。
<%= link_to 'Back', user_orders_path(@user) %>