0

ネストされたリソースアクションに関する助けが必要です。私は3つのネストされたリソースを持っています:ジョブ、質問と回答。私は現在、質問コントローラのために動作するように編集/更新メソッドを取得しようとしています。関係はそうです:仕事はhas_many質問と質問は仕事に属します。Rails 3ネストされたリソースメソッドの編集/更新 - ルーティングエラー

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

No route matches "/jobs/1/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 

物事そのIドン a)なぜ私が質問のインデックスパスにリダイレクトされているのですか?それをそこにリダイレクトしなかった、そして b)それは有効なルートではないと言いますが、私がその正確なURLをリフレッシュするとページが正しくロードされます。

複数のオプションを試しましたが、解決策を見つけられません。

ありがとうございました。あなたがより多くの情報を必要とするかどうか私に教えてください。

p.s.ここに私のすくい路線です:https://gist.github.com/1077134

答えて

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 

と作成nested_forms(親リソース)NEW_FORMビュー:だから私はそれを変更しました。

<%= 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 %> 

これを実行すると、私のコントローラのすべてのメソッドがよりクリーンになり、編集/更新アクションが適切に機能していました。

これは私が問題を解決した方法ですが、これを行う最良の方法ではない可能性があります。また、追加するものや私のコードに関する質問がある場合は、私に知らせてください。私が助けることができるかどうかがわかります。

ありがとうございます!

2

あなたが開始するには、/ show.rbビュー/求人 :

ビュー/質問/ show.rbで
<%= link_to 'Edit', edit_jobs_path(@job) %> 

:で

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

表示/質問/ edit.rb:

<%= link_to 'Show', job_question_path %> 

私が示しているのは、リンクがネストされたパターンを持つ必要があるということです。回答に多くのコメントがあった場合は、 edit_job_question_answer_comment(@job、@question、@answer、@comment) のようになります。@記号付きの変数はコントローラ内で得られます。 これが役立つことを願っています!

あなたが後で必要があります。

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 
+0

ありがとう@rainbowpony、これは私が持っていたルーティングの質問のいくつかをクリアしますが、私の問題を解決しませんでした。 – Igrabes

関連する問題