0

我需要一些關於嵌套資源操作的幫助。我有三個嵌套的資源:工作,問題和答案。我目前只試圖讓編輯/更新方法爲問題控制器工作。關係如下:喬布斯有許多問題和問題屬於喬布斯。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 

的事情,我不不明白的是: 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:

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

鑑於/問題/ show.rb:

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

在查看/ questions/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 
+0

謝謝@rainbowpony,這確實清除了我的一些路由問題,但沒有解決我的問題。 – Igrabes