2011-07-27 67 views
0

多態協會(這裏:評論)如何與不同類型的作者關聯?不同'作者'模型導軌中的多態關聯

從開始...

class Comment < ActiveRecord::Base 
    belongs_to :commentable, :polymorphic => :true 
end 

...我需要有一個筆者從模型是主機,ID 5用戶,2另一個。

怎麼可能路徑的助手模樣......

<%= link_to comment.author.name, user_path(comment.author) %> 

...當 「user_path」 或 「host_path」 是動態的,根據筆者的模型?

編輯***

有活動,地點等,可以有意見,像這樣:

has_many :comments, :as => :commentable 

與多態性評論模式,我想補充的ID和類型指發表評論的作者:

create_table "comments", :force => true do |t| 
    t.text  "content" 
    t.integer "commentable_id" 
    t.string "commentable_type" 
    t.integer "author_id" 
    t.string "author_type" 
    end 

一個Events頁面顯示註釋,並且點擊一個作者姓名應該帶我到用戶(5)或AnotherModel(2),取決於誰寫了評論。

我想知道每個人如何處理這種情況。我應該考慮添加第二個多態「中間層」,比如「profile」,它可以包含子類「用戶」,「主機」等等?

EDIT 2

由於只有一個用戶模式將使生活更容易在這裏很明顯,但不能因其他原因來完成。一般來說,我很感興趣的是如何組織好。

回答

1

乾脆把

<%= link_to comment.author.name, comment.author %> 

應該做的伎倆。如果你想要更多的靈活性,我建議

link_to ..., action_in_host_path(comment.author) if comment.author.kind_of? Host 
+0

謝謝你,你的第一個解決方案將需要'belongs_to的:author',我想?只有沒有作者模式。所以使用'belongs_to:author,:class =>「User」'會啓用它。但是,再次,我不能將評論與特定作者模型(需要主機,用戶...)聯繫起來。 – David

+0

所以我可以這樣理解:用戶和主機都可以在作爲作者的用戶和主機上創建評論?然後你的評論需要一個多態的作者,就像你對可評論的評論一樣。 – emrass

+0

謝謝,需要在我的腦中證實:通過=>其他用戶:) – David

0

這是我在過去已經使用(在視圖助手),但它使用一個eval:

def model_path(model, options = {}) 
    {:format => nil}.merge(options) 
    format = (options[:format].nil? ? 'nil' : "'#{options[:format].to_s}'") 
    eval("#{model.class.to_s.downcase}_path(#{model.id}, :format => #{format})") 
end 

使用這樣的:

<%= link_to comment.author.name, model_path(comment.author) %> 
+0

謝謝,看起來像一個可能的解決方案,但請看看我的其他評論,因爲'comment.author.name'將需要一個專門的'belongs_to'? – David

+1

(我認爲blackbird的回答比我的好,evals給了我heeby-jeebies ......)如果你的評論有作者,那麼它必須與作者有關​​系(在這種情況下是多態)。如果「作者」的意思是「可評論者的作者」,那麼使用'comment.commentable.author'來代替'comment.author'。 – jimworm

0

請問polymorphic_url有幫助嗎?

<%=的link_to comment.author.name,polymorphic_url(comment.commentable) %>