0

ネストされたリソースアクションについてサポートが必要です。ネストされたリソースが3つあります。ジョブ、質問、回答です。私は現在、質問コントローラーで編集/更新メソッドを機能させることだけを試みています。関係は次のとおりです。Jobshas_manyの質問とQuestionsはJobsに属しています。

質問に対して編集アクションを使用していますが、エラーが発生します:

No route matches "/jobs/1/questions"

理由がわかりません。

私は現在、Questionsコントローラーの編集および更新アクションとしてこのコードを持っています:

def edit
 @job = Job.find(params[:job_id])
 @question = @job.questions.find(params[:id])
end

def update
  @job = Job.find(params[:job_id])
  @question = @job.questions.find(params[:id])

  if @question.update_attributes(params[:question])
    redirect_to(@question)
  end
end

モデル:

class Job < ActiveRecord::Base
has_many :questions

class Question < ActiveRecord::Base
belongs_to :job

ルート:

  resources :jobs do
   resources :questions do
    resources :answers
   end
 end

私が理解していないことは次のとおりです:a)リダイレクトしなかったのに、なぜ質問インデックスパスにリダイレクトされるのか、b)有効なルートではないと表示されますが、正確に更新するとページが正しく読み込まれるURL。

複数のオプションを試しましたが、解決策がわかりません。

助けてくれてありがとう。さらに情報が必要な場合はお知らせください。

psここに私のレーキルートがあります:https ://gist.github.com/1077134

4

2 に答える 2

2

開始するには、view / jobs / show.rbで:

<%= link_to 'Edit', edit_jobs_path(@job) %>

view / question / show.rbで:

<%= link_to 'Edit', edit_job_question_path(@question.job, @question) %>

view / question / edit.rbで:

<%= link_to 'Show', job_question_path %>

私が示しているのは、リンクにはネストされたパターンが必要であるということです。回答に多くのコメントが含まれている場合は、edit_job_question_answer_comment(@job、@question、@answer、@comment)のようになります。ここで、@symboled変数はコントローラーで派生します。お役に立てれば!

あなたは後で望むかもしれません:

class Job < ActiveRecord::Base
  has_many :questions
  has_many :answer, :through => :questions

  # If you want to edit the questions of a job whilst editing a job then research accepts nested attributes
  #accepts_nested_attributes_for :questions, :allow_destroy => true
end
于 2011-07-18T09:12:19.940 に答える
2

ですから、私の問題は当初考えていたよりも少し複雑だったことがわかりました。データベースとテーブルが適切に設定されておらず、リソースの適切な:idを見つけるのに問題がありました。私は次のようにテーブルを正規化することから始めなければなりませんでした:

class CreateQuestions < ActiveRecord::Migration
def self.up
create_table :questions do |t|
   t.references :job
  t.text :question1
  t.text :question2
  t.text :question3
  t.text :question4
  t.text :question5
  t.text :question6
  t.text :question7
  t.text :question8
  t.text :question9
  t.text :question10

  t.timestamps
end
end

この設定は反復的で汚いものであり、質問コントローラーのアクションを台無しにしていました。だから私はそれを次のように変更しました:

def self.up
create_table :questions do |t|
  t.references :job
  t.text :question

  t.timestamps
end
end

そして、私のジョブ(親リソース)のnew_formビューにループを含むnested_formsを作成しました。

<%= form_for(@job) do |f| %>
 <%= f.label :name %><br />
 <%= f.text_field :name %>
<%= f.fields_for :questions do |builder| %>
 <%= f.label :question, "Question" %><br \>
 <%= f.text_area :question, :rows => 10 %>
<% end %>

これを行った後、私のコントローラーメソッドはすべてクリーンになり、編集/更新アクションは正しく機能していました。

これが私が問題を解決した方法です、それはそうするための最良の方法ではないかもしれません。また、追加するものや私のコードについて質問がある場合は、お知らせください。サポートできるかどうかを確認します。

ありがとう!

于 2011-07-20T03:14:45.030 に答える