Rails 表单 - 多个嵌套路由未定义方法'_path'

Rails form - multiple nested routes undefined method '_path'

此应用有以下型号:

  1. 农场(has_many:作物)
  2. 作物(belongs_to:农场,has_many:问题)
  3. 问题(belongs_to:裁剪)

路线如下:

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

我希望用户能够从列出农场所有作物的农场#show 页面创建一个新的 "issue"。以下是在 Farm#show 页面上导致错误的表单:

undefined method `crop_issues_path' for #<#: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

当农作物和问题没有嵌套在农场下时,我使用了几乎相同的代码,并且它有效。我相信问题是因为嵌套,但无法找到解决方案。

我认为您的问题出在将表单绑定到的对象上。它应该是@farm,因为您正在参加@farms 表演活动。

我修改成这样:

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