此应用有以下型号:
以下是路线:
resources :farms do
resources :crops do
resources :issues
end
end
我希望用户能够创建一个新问题"来自Farm#show页面,其中列出了所有农场作物。以下是导致农场#show页面错误的表单:
未定义的方法`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
当作物和问题没有嵌套在农场之下时,我使用了几乎相同的代码,并且它有效。我认为这个问题是因为嵌套,但无法找到解决方案。
答案 0 :(得分:1)
我认为你的问题在于你正在将表格绑定到的对象。它应该是@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