0

我有表審計日誌與字段包括:audited_id | audited_typeRails 3 - polymorphic_path - 如何創建一個給定的表

產生如下數據: 108 |照片 303 |評論

我想要做的就是創建一個鏈接到該項目,所以上面的例子:

這裏是照片

我試圖用一個polymorphic_path,但我得到一個錯誤: 「未定義方法Fixnum對象`模型名稱」:類」

當使用:

<%= link_to 'Here she is', polymorphic_path([audited_id, audited_type]) %> 

想法?感謝

基於由下面盧克答案與代碼更新:

class NewsFeed < ActiveRecord::Base 
    default_scope :order => 'news_feeds.created_at DESC'  
    belongs_to :feeded, :polymorphic => true 
end 

class Note < ActiveRecord::Base 
    has_many :newsfeed, :as => :feeded 
end 

在部分正被傳遞的本地storyitem:

<%= link_to 'Here she is', polymorphic_path(storyitem.feeded) %> 

的DB遷移文件,包含以下行for CreateNewsFeeds

t.references :feeded, :polymorphic => true 

回答

3

你應該有一個方法#auditable(或whatev呃你的多態關聯被調用)在AuditLog對象上。如果您將該方法的結果傳遞給polymorphic_path,它將爲您返回正確的路徑。

更新:

假設你有以下的關聯(或正在使用acts_as_auditable或東西,建立的關係你):

class AuditLog 
    belongs_to :auditable, :polymorphic => true 
end 

class AuditedObject 
    has_many :audits, :as => :auditable 
end 

你就可以調用的可審計的任何實例審計日誌,它將返回相關的審計對象。因此,您可以撥打

<%= link_to 'Here she is', polymorphic_path(audit_log.auditable) %> 

以獲取到審覈對象的鏈接。

因此,在類中有多態關聯的任何地方,都有一個實例方法設置,該關聯的名稱將返回關聯的對象。

天哪,我希望這是有道理的。如果您需要我進一步澄清,請告訴我。

+1

如果不明確,AuditLog#auditable會返回關聯的對象,這很方便,否則您必須執行audited_type.constantize.find(audited_id)之類的操作。 – 2010-10-01 15:57:02

+0

@Luke,謝謝,但我不知道我在跟着......上面的代碼示例是否正確?如果沒有,您可以通過任何方式更新您的答案?另外,你是否說我需要確保我已經通過belongs_to,在照片模型的模型中設置了has_many關係? thxs – WozPoz 2010-10-01 16:43:17

+0

盧克,感謝你解釋得這麼好。我想我現在正在接受一般概念,但由於某種原因,我正在努力使其發揮作用。我用我的特定代碼更新了這個問題。如果你看到我做錯了什麼,你能告訴我嗎? – WozPoz 2010-10-01 20:57:12

0

polymorphic_path的問題需要一個對象,所以你首先需要從數據庫中獲取對象。 根據您的使用情況,這可能是一個很大的性能問題。 如果是日誌查看器,例如有100個條目的列表, ,並且只想顯示鏈接到條目,則將獲取100個對象,以獲取它們的路徑。

我也有類似的問題,我的解決方案是黑客從類名和ID構建路徑的方法:

class AuditLog 
... 
def audited_path 
    "/#{self.audited_type.tableize}/#{self.audited_id}" 
end 

該方法將返回如「/照片/ 302」。但是,它當然只適用於非常簡單的路線。

相關問題