2012-12-14 56 views
0

我很努力地掌握編寫模型方法的基礎知識,這是我認爲我需要做的才能使其發揮作用。基本上,我有一個項目視圖,顯示屬於該項目的project_todos。然後嵌套,我有project_todo_comments屬於project_todo。所有在一個視圖。Rails - 在一個視圖中嵌套3個模型

我已經建立了關聯,以便項目has_many project_todos,project_todo belongs_to project和has_many project_todo_comments。那麼當然project_todo_comment belongs_to project_todo。

在項目控制器,我這樣做:

def show 
    @project = Project.find(params[:id]) 

    # Display the form to create a new todo 
    @project_todo = ProjectTodo.new 

    # Create the instance variable to display the loop in the view 
    @todos = @project.project_todos 

    # Display the form to create a new comment 
    @project_todo_comment = ProjectTodoComment.new 

    # Create the instance variable to display the loop in the view 
    @comments = @project.project_todo_comments 

    respond_to do |format| 
     format.html # show.html.erb 
     format.json { render :json => @project } 
    end 
    end 

所以這是工作的地步,我可以在一個項目中添加待辦事項,並顯示他們,我還可以添加註釋到項目待辦事項並以同樣的視角展示它們。但是,我只能在與他們關聯的待辦事項中顯示評論時遇到困難。現在,當我在任何待辦事項上添加評論時,每一個待辦事項都會顯示該評論。

在視圖中,這裏的地方我顯示project_todos和嵌套形式添加註釋,然後顯示評論:

​​3210

我被告知,我需要寫一個模型的方法爲了讓這個工作,但我仍然試圖理解這些。任何人都可以放心,我確實需要寫一個模型方法,並指出我瞭解它們的方向?謝謝!

回答

1

在您的控制器中,您可以獲得所有評論,但是在實際的todo項目中,您只需要該項目的評論。這是可以做到的:todo.project_todo_comments
最簡單的方法來解決:

- <% @comments.each do |comment| %> 
- <%= comment.comment %> 
- <% end %> 

+ <% todo.project_todo_comments.each do |comment| %> 
+ <%= comment.comment %> 
+ <% end %> 

您可以從控制器刪除行:

- @comments = @project.project_todo_comments 

然而,在您的形式(如您創建註釋)你使用了錯誤的ID爲待辦事項:

- <%= f.hidden_field :project_todo_id, :value => @project_todo.id %> 
+ <%= f.hidden_field :project_todo_id, :value => todo.id %> 

順便說一句,我只想命名這些模型: TodoComment,使用那個長型號沒有意義。您可以在模型的開頭定義這些關聯,因此如果有人閱讀它,他/她會立即看到它。

例如,看我自己,我知道你的模型的目的仍然是誤用命名,導致類名太長。

+0

但是然後評論是不確定的。應該是'''<%todo.project_todo_comments.each do | comment | %>'''而不是? –

+0

你說得對,我糾正了我的答案,我被竊聽,導致這些類名稱有點長。 – p1100i

+0

嗯沒關係。所以我在做這些時沒有任何錯誤,但是現在根本不顯示評論,即使我添加了新的評論和新評論。我想我不明白當你拿出控制器的'''@ comments'''實例變量時它是如何工作的。它現在如何訪問模型?僅僅是因爲has_many belongs_to協會? –

相關問題