当我使用路径 edit_projects_proj_paquet_mesures_proj_mesure_path ()时,我在使用form_for的视图中收到以下错误:
undefined method `projects_proj_mesure_path' for #<#<Class:0xac942e4>:0xac9d1f0>
当我使用路径 new_projects_proj_paquet_mesures_proj_mesure_path ()时,不会发生此错误。
虽然我将我的资源定义为嵌套在我的 config / route.rb
中的命名空间namespace :projects do
resources :proj_paquets_mesures do
resources :proj_mesures
end
end
根据此stackoverflow question-answer的建议,我的_form.html.haml以:
开头form_for([:projects, @proj_paquet_mesures, @proj_mesure], :html => {:class => "formulaire-standard"}) do |f|
...
请注意在config / initializer / inflection.rb中设置了异常:
ActiveSupport::Inflector.inflections do |inflect|
inflect.irregular 'proj_paquet_mesures', 'proj_paquets_mesures'
end
当我为我的资源使用Shallow选项并使用路径 projects_proj_mesure_path ()时,一切都运行良好:
namespace :projects do
resources :proj_paquets_mesures, :shallow => true do
resources :proj_mesures
end
end
答案 0 :(得分:0)
无视!这不是一个错误。
我解决了这个问题。 问题的起源在控制器中:
我没有正确地实例化@proj_paquet_mesures。 相反,它持有'零'价值。
这导致form_for的行为就像我用:
调用它一样form_for (:projects, @proj_mesure) do |f|
,结果HTML是:
<form id="edit_proj_mesure_1" class="formulaire-standard" method="post" action="/projects/proj_mesures/1" accept-charset="UTF-8">
所以要纠正这个问题,我只需要修改我的控制器:
def edit
@proj_paquet_mesures = ProjPaquetMesures.find_by_id(params[:proj_paquet_mesures_id])
unless @proj_paquet_mesures.nil? then
@proj_mesure = ProjMesure.find_by_id(params[:id])
unless @proj_mesure.nil? then
respond_with(:projects, @proj_mesure)
else
render 'blank_page'
end
else
render 'blank_page'
end
end
这完美地运作:
form_for([:projects, @proj_paquet_mesures, @proj_mesure], :html => {:class => "formulaire-standard"}) do |f|