1

何が問題なのかはわかりますが、それを修正するのに苦労しています。

私の状況をもう一度説明すると、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 層より深くすべきではないことはわかっていますが、それが私にとって最も簡単で迅速な解決策でした。

再度、感謝します!

4

1 に答える 1

0

この行に基づいて:

No route matches {
  :action=>"show", :controller=>"answers", 
  :job_id=>nil, #Problem
  :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_idAnswer オブジェクトの が nil であることがわかります。あなたのフォームヘルパーはjob_question_answers_pathwhich と a を必要とするをjob_id使用していますが、が nil ( )question_idであるため、ルートエラーは壊れています:job_id@answer.job_id

<%= form_for(@answer, :url => job_question_answers_path(@answer.job_id, @question)) do |f| %>

アクションを明示的に設定@answer.jobしてみてください。AnswersController#new

def new
  # You may already have code that does this...
  @answer = Answer.new

  # Guessing on param names here:
  @answer.question = Question.find params[:question_id]
  @answer.job = Job.find params[:job_id]

  # Alternatively, you can probably just set the ids, 
  # but the above will verify those objects exist first.
  @answer.job_id = params[:job_id]
  @answer.question_id = params[:question_id]
end
于 2011-07-01T16:00:19.780 に答える