2015-10-12 5 views
1

Я постоянно получаюRails Вложенные маршруты не определен метод

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) %> 

ответ

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) %> 

в противном случае он не сможет снова.

Надеюсь, что это поможет решить ваши проблемы.

+0

На самом деле все еще получаю ту же ошибку ... – Seal

+0

Действительно? После того, как вы внесли изменения, упомянутые в моем ответе, вы получаете ТОЧНУЮ ошибку? По крайней мере, это должна быть РАЗЛИЧНАЯ ошибка, если не исправить вашу проблему. –

+0

не могли бы вы показать свой контроллер и просмотреть файлы? –

0

С orders вложенно поверх пользователей, объявление form_for должно включать в себя как пользователя, так и объекты заказа.

<%= form_for([@user, @order]) do |f| %> 

Ваш new шаблон также должны иметь ссылку на данного пользователя.

<%= link_to 'Back', user_orders_path(@user) %>