Ruby on rails Rails form-多个嵌套路由未定义方法'_路径';

Ruby on rails Rails form-多个嵌套路由未定义方法'_路径';,ruby-on-rails,forms,nested-resources,Ruby On Rails,Forms,Nested Resources,此应用程序具有以下型号: 农场(有许多:农作物) 作物(属于:农场,有许多:问题) 问题(属于:作物) 以下是路线: resources :farms do resources :crops do resources :issues end end 我希望用户能够从农场的“显示”页面创建一个新的“问题”,列出农场的所有作物。以下是导致服务器场显示页面出错的表单: 未定义的方法“裁剪问题路径”# 当作物和问题没有嵌套在农场下时,我使用了几乎相同的代码,并且它是有效的。我相信

此应用程序具有以下型号:

  • 农场(有许多:农作物)
  • 作物(属于:农场,有许多:问题)
  • 问题(属于:作物)
  • 以下是路线:

    resources :farms do 
      resources :crops do 
        resources :issues
      end 
    end
    
    我希望用户能够从农场的“显示”页面创建一个新的“问题”,列出农场的所有作物。以下是导致服务器场显示页面出错的表单:

    未定义的方法“裁剪问题路径”#


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

    我认为您的问题在于您正在将表单绑定到的对象。它应该是@farm,因为您在@farms show action中

    我将其修改为:

    <% @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
    
    class FarmsController
    在表单中添加“@farm”似乎解决了这个问题!不熟悉“@farm.try(:crops)”以及它与“@farm.crops”有什么区别?啊,很抱歉,这是我的懒惰-不想将crops添加到我的db中来测试场景,所以我添加了
    .try()
    ,这样它就不会在
    @crops
    中出现空值
    <% @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