0

パス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

リソースに浅いオプションを使用し、パスprojects_proj_mesure_path ()を使用していた場合、すべてが正常に機能していました。

namespace :projects do
    resources :proj_paquets_mesures, :shallow => true do
      resources :proj_mesures
    end
end
4

1 に答える 1

0

無視してください!これはバグではありません。

問題を解決しました。問題の起源はコントローラーにありました:

@proj_paquet_mesures を正しくインスタンス化していませんでした。代わりに、「nil」値を保持していました。

これにより、 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|
于 2013-02-01T17:09:08.053 に答える