我不断收到
undefined method 'orders_path' for #<#<Class:0x007faefee50a88>:0x007faefee414e8>
导航到我的新订单路径 url /users/1/orders/new
时
一直卡在这个问题上,不知道交易是什么。
路线:
devise_for :users, :path => 'accounts'
resources :users, only: [:index, :show] do
resources :orders
end
根索引:
<%= 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) %>
最佳答案
当你写下这个:
<%= form_for(@order) do |f| %>
Rails 正在寻找 orders_path
,但您实际上并没有这样的路由,因为您已经定义了嵌套在 users
下的 orders
资源> 资源。因此,您必须将 @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) %>
否则会再次失败。
希望这有助于解决您的问题。
关于ruby-on-rails - Rails 嵌套路由未定义方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33072074/