2011-04-03 50 views
1

我想向我的應用程序添加評論,以便視頻的所有者可以爲該視頻選擇多個評論欄/表單,併爲每個欄添加標題,然後用戶可以對其中一個評論或更多的專欄。建立這些複雜模型關聯的最佳方式是什麼?

我想建立其表看起來像這樣一個VideoComment模式:

------------------------------------- 
id | video_id | user_id | comment_id 

然後視頻將有一個的has_many通過與通過VideoComment意見關聯。此外,用戶可以通過VideoComment通過與每條評論和視頻的關聯來獲得has_many。

爲了支持多列,我在考慮讓評論與另一個模型CommentColumns有一個habtm關聯。

評論看起來就像這樣:

----------------------------- 
id | body 

CommentColumns看起來就像這樣:

------------------------ 
id | title 

而且加入了註釋,commentColumn間表將CommentMatching:

------------------------------ 
comment_id | comment_column_id 

我的第一個問題是......我在正確的軌道上,還是我距離很遠?

我的第二個問題是......在我的控制器中訪問不同數據關聯的所有可能的組合是什麼?

PS。不要害羞!如果你想讓我澄清一些事情,請問我任何問題。

回答

4

我會建議沿東西的論壇是如何工作的線條更加什麼你描述:

  • A用戶的has_many視頻和評論
  • 視頻的has_many主題
  • belongs_to的視頻主題和評論的has_many
  • 評論belong_to用戶和話題

那麼你的協會是索姆很簡單,你甚至不需要任何HABTM類型的關聯。

什麼是所有可能的組合?負載,但這裏有幾個例子:

#Create a video 
@user.videos.create(...attributes...) 

#Create a topic 
@video.topics.create(...attributes...) 

#Create a comment 
@topic.comments.create(...attributes...) 

#Find all comments from a user 
@user.comments 

#Find all comments from a particular topics 
@topic.comments 

#Find all comments from a particular user on a particular topic 
@topic.comments.where(:user=>foo) 

希望是有道理的。

CNC中

有,你可以找到一個特定的視頻全部評論不同的方式,問題是你有什麼需要他們?

如果你只是想向他們展示在你看來,最簡單的事情會是這樣的(在HAML):

- for topic in @video.topics do 
    = topic.title 
    - for comment in topic.comments do 
    = comment.body 

要返回他們都作爲查詢我想你可以做這樣的事情。 ..

# untested 
Comment.joins(:topics).where('topics.video_id' => video.id) 

你可以每視頻用戶評論這樣做,或者你可以只添加關聯,其中belongs_to的視頻評論。一個警告,雖然... --edited出來,見下文---

CNC中

好吧,我收回,我想起了我自己的應用程序錯誤。有沒有「陷阱」,我記得大約意見既視頻和一個主題相關聯,所以最簡單的事情也只是設置意見belong_to視頻以及。請確保並測試這些關聯,以便在記錄中不會獲得video = nil。我沒有測試這個,但作爲我記得通過像@video.topics.first.comments.create(:attributes)視頻建設實際上不創建視頻關聯,只有主題關聯。我認爲我不得不做更類似的事情:

@topic.comments.create(...attributes..., :video=>@topic.video) 

測試並確保。

現在我回頭看我自己的代碼是什麼,我記得有,當我需要建立一個嵌套的關係,其中一個對象可能屬於同一類的父與父容器是個麻煩。 IE:評論可能嵌套回覆,所以評論屬於主題,也屬於其他評論。這是什麼引起麻煩。屬於一個主題和一個視頻的評論很好。

很抱歉的心理失誤:)

你有你的關聯後只是做...

@video.comments.where(:user=>some_user) 

..和你會從特定坐上視頻所有評論用戶。

+0

你的設置使得除了一件事感覺,讓我困惑:視頻有很多話題和主題有很多的意見,但我想像這樣一個表的評論跨越的垂直主題的多種每個水平評論蔓延,等等不會有評論有很多話題?或者每個評論實際上只是一個塊而不是整個水平行? – 2011-04-03 03:08:56

+0

此外,您將如何獲得用戶對特定視頻的所有評論? – 2011-04-03 03:13:19

+0

類似於@ @ video.topics.comments.where(:user_id => X)'? – 2011-04-03 03:23:46

相關問題