Rails форма - несколько вложенных маршрутов, неопределенный метод '_path'

Это приложение имеет следующие модели:

  1. Ферма (has_many: урожай)
  2. Растениеводство (принадлежит: ферме, has_many: проблемы)
  3. Проблема (относится к: кроп)

Вот маршруты:

resources :farms do 
  resources :crops do 
    resources :issues
  end 
end

Я хочу, чтобы пользователь мог создавать новую "проблему" со страницы показа Farm #, которая перечисляет все урожаи фермы. Вот форма, которая вызывает ошибку на странице Farm # show:

undefined метод `crop_issues_path 'для #<#: 0x007fa814a3cc30>

#from the show action on the controller:
#@farm = Farm.find(params[:id])
#@crops = @farm.crops

<% @crops.each do |crop| %>
<%= crop.id %>
  <%= form_for([crop, crop.issues.build]) do |f| %>
    <%= f.select(:issue_type, options_for_select([['mold'], ['pests'], ['dehydration'], ['other']])) %>
    <%= f.text_area :notes %><br>
    <%= f.submit "New Issue", :class => "button" %>
  <% end %> 
<% end %>

Мои действия по созданию контроллера проблем:

  def create
    @crop = Crop.find(params[:crop_id])
    @issues = @crop.issues.create(params[:issue].permit(:issue_type, :notes, :crop_id))

    redirect_to :back
  end

Я использовал почти идентичный код, когда зерновые культуры и проблемы не были вложены в фермы, и это работает. Я полагаю, что проблема из-за вложенности, но не могу найти решение.

1 ответ

Решение

Я думаю, что ваша проблема с объектом, к которому вы добавляете форму. Это должен быть @farm, поскольку вы участвуете в действии @farms show.

Я изменил это так:

<% @crops.each do |crop| %>
<%= crop.id %>
  <%= form_for([@farm, crop, crop.issues.build]) do |f| %>
    <%= f.text_area :notes %><br>
    <%= f.submit "New Issue", :class => "button" %>
  <% end %> 
<% end %>

с моим контроллером вот так:

class FarmsController < ApplicationController
  def index
  end

  def show
    @farm = Farm.find_by_id(params[:id])
    @crops = @farm.try(:crops)
  end
end
Другие вопросы по тегам