0

我有表 AuditLog 字段包括:audited_id | 审核类型

这会产生如下数据:108 | 照片 303 | 评论

我想要做的是创建一个指向该项目的链接,因此对于上面的示例:

这是照片

我正在尝试使用多态路径,但出现错误:“Fixnum:Class 的未定义方法 `model_name'”

使用时:

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

想法?谢谢

根据下面 Luke 的回答更新代码:

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

在被传递的局部故事项目中:

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

数据库迁移文件,包含 CreateNewsFeeds 的以下行

  t.references :feeded, :polymorphic => true
4

2 回答 2

3

您应该在 AuditLog 对象上有一个方法 #auditable(或任何您的多态关联)。如果您将该方法的结果传递给 polymorphic_path,它将为您返回正确的路径。

更新:

假设您有以下关联(或正在使用acts_as_auditable 或为您建立关系的东西):

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

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

您将能够在 AuditLog 的任何实例上调用可审核的,它将返回关联的审核对象。所以你可以打电话

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

获取审计对象的链接。

因此,在类中具有多态关联的任何地方,都有一个实例方法设置,该关联的名称将返回关联的对象。

天哪,我希望这是有道理的。如果您需要我进一步澄清,请告诉我。

于 2010-10-01T15:45:19.723 回答
0

polymorphic_path 的问题它需要一个对象,因此您首先需要从数据库中获取该对象。根据您的用例,这可能是一个很大的性能问题。在日志查看器的情况下,您有一个例如 100 个条目的列表,并且只想显示指向整体的链接,您将获取 100 个对象,只是为了获取它们的路径。

我有一个类似的问题,我的解决方案是破解一个从类名和 id 构造路径的方法:

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

该方法将返回例如“/photos/302”。但当然,它只适用于非常简单的路由。

于 2011-10-12T17:02:30.100 回答