何が問題なのかはわかりますが、それを修正するのに苦労しています。
私の状況をもう一度説明すると、Jobs、Questions and Answers の 3 つの要素があります。すべての関係を以下に設定します。Jobs > Questions の関係に関係していた以前の質問を拡張して、Jobs > Questions > Answers に Answers の関係を追加しました。
そのため、routes.rb に新しいリソースを追加すると、ルーティング エラーが発生しました。これは、進行中に修正していました。この問題は、フォーム Answers#new ページに到達し、form_for scaffolding を変更して、Answers コントローラーのCreateアクションでビルドする必要があったときに発生しました (以下の 2 つのコードを確認できます)。
新しい回答ページにフォームを表示するのに十分なものを修正できましたが、送信をクリックすると次のエラーが発生します。
No route matches {:action=>"show", :controller=>"answers", :job_id=>nil, :question_id=>1, :id=>#<Answer id: 3, job_id: nil, question_id: 1, answer1: "", answer2: "", answer3: "", answer4: "", answer5: "", created_at: "2011-07-01 03:12:06", updated_at: "2011-07-01 03:12:06">}
このエラーから、job_id を保存していないことがわかります。これは、answers create アクションまたは answer new form_for コードのいずれかで job_id を適切に呼び出していないことに関係していると確信しています。私はたくさんの解決策を試しましたが、何もうまくいかないようです。作成アクションに近づいているように感じますが、うまくいきません。とにかく、事前に助けてくれてありがとう。十分な周囲のコードがなくて提供していない場合は、お知らせください。追加します。
この質問は、この投稿の拡張です: Link_to Routing Issue With Nested Resources
PS また、answers/1/ に直接アクセスすると正常に動作するため、answers show アクションも追加しました。create アクションが間違っていれば、show アクションも間違っていると感じています。
モデル:
class Job < ActiveRecord::Base
has_many :questions
has_many :answers
class Question < ActiveRecord::Base
belongs_to :job
has_many :answers
class Answer < ActiveRecord::Base
belongs_to :job
belongs_to :question
Answers#新しいフォーム
<%= form_for(@answer, :url => job_question_answers_path(@answer.job_id, @question)) do |f| %>
答えは行動を起こす
def create
@job = Job.find(params[:job_id])
@question = @job.questions.find(params[:question_id])
@answer = @question.answers.build(params[:answer])
if @answer.save
redirect_to(job_question_answer_path(@answer.job_id, @answer.question_id, @answer)
end
end
答えは行動を示す
def show
@job = Job.find(params[:job_id])
@question = @job.questions.find(params[:question_id])
@answer = @question.answers.find(params[:id])
end
最新のレーキ ルートについては、このhttps://gist.github.com/1057810を参照してください。ネストを 1 層より深くすべきではないことはわかっていますが、それが私にとって最も簡単で迅速な解決策でした。
再度、感謝します!