Ruby on rails Rails 3-多态路径-如何创建一个给定的表
我有一个表AuditLog,其中的字段包括:audited_id | audited_type 这会产生如下数据: 108 |照片 303 |评论 我要做的是创建指向该项目的链接,因此对于上面的示例: 这是照片 我试图使用多态路径,但遇到错误:“Fixnum:Class的未定义方法`model\u name'” 使用时:Ruby on rails Rails 3-多态路径-如何创建一个给定的表,ruby-on-rails,ruby-on-rails-3,polymorphic-associations,Ruby On Rails,Ruby On Rails 3,Polymorphic Associations,我有一个表AuditLog,其中的字段包括:audited_id | audited_type 这会产生如下数据: 108 |照片 303 |评论 我要做的是创建指向该项目的链接,因此对于上面的示例: 这是照片 我试图使用多态路径,但遇到错误:“Fixnum:Class的未定义方法`model\u name'” 使用时: <%= link_to 'Here she is', polymorphic_path([audited_id, audited_type]) %> 您应该在Au
<%= link_to 'Here she is', polymorphic_path([audited_id, audited_type]) %>
您应该在AuditLog对象上有一个方法#auditable(或者调用任何多态关联)。如果将该方法的结果传递给多态路径,它将为您返回正确的路径
更新:
假设您有以下关联(或将acts_用作可审核的对象或为您设置关系的对象):
您可以在AuditLog的任何实例上调用auditable,它将返回关联的audited对象。所以你可以打电话
<%= link_to 'Here she is', polymorphic_path(audit_log.auditable) %>
获取到已审核对象的链接
因此,在类中任何有多态关联的地方,都会有一个实例方法设置,其名称为该关联,将返回关联的对象
天哪,我希望这是有道理的。如果您需要我进一步澄清,请告诉我。您应该在AuditLog对象上有一个方法#auditable(或任何您的多态关联被调用的方法)。如果将该方法的结果传递给多态路径,它将为您返回正确的路径
更新:
假设您有以下关联(或将acts_用作可审核的对象或为您设置关系的对象):
您可以在AuditLog的任何实例上调用auditable,它将返回关联的audited对象。所以你可以打电话
<%= link_to 'Here she is', polymorphic_path(audit_log.auditable) %>
获取到已审核对象的链接
因此,在类中任何有多态关联的地方,都会有一个实例方法设置,其名称为该关联,将返回关联的对象
天哪,我希望这是有道理的。如果您需要我进一步澄清,请告诉我。多态路径的问题需要一个对象,因此您首先需要从数据库中获取该对象。 根据您的用例,这可能是一个很大的性能问题。 对于日志查看器,您有一个包含例如100个条目的列表, 只要显示到entires的链接,就可以获取100个对象,只需获取它们的路径 我有一个类似的问题,我的解决方案是破解一个方法,从类名和id构建路径:
class AuditLog
...
def audited_path
"/#{self.audited_type.tableize}/#{self.audited_id}"
end
该方法将返回例如“/photos/302”。当然,它只适用于非常简单的路由。多态路径的问题是,它需要一个对象,因此首先需要从数据库中获取对象。 根据您的用例,这可能是一个很大的性能问题。 对于日志查看器,您有一个包含例如100个条目的列表, 只要显示到entires的链接,就可以获取100个对象,只需获取它们的路径 我有一个类似的问题,我的解决方案是破解一个方法,从类名和id构建路径:
class AuditLog
...
def audited_path
"/#{self.audited_type.tableize}/#{self.audited_id}"
end
该方法将返回例如“/photos/302”。当然,它只适用于非常简单的路由。如果不清楚,AuditLog#auditable将返回关联的对象,这很方便,因为否则您必须执行类似audited _type.constantize.find(audited _id)的操作。@Luke,谢谢,但我不确定我是否在跟踪。。。上面的代码示例正确吗?如果没有,你有什么办法更新你的答案吗?另外,你是说我需要确保我有自己的归属,照片模型的模型中有很多关系吗?thxsLuke,谢谢你解释得这么好。我想我现在已经了解了一般的概念,但出于某种原因,我正在努力让它发挥作用。我用我的特定代码更新了问题。如果你看到我做错了什么,你能告诉我吗?还有一件事,上面给出了错误“NilClass:Class的未定义方法'model_name'”啊,我想它不起作用的原因是我在表中有一些多态关联的空记录。。。我想如果它是空的,它就会失败。。非常感谢。如果不清楚,AuditLog#auditable将返回关联的对象,这很方便,因为否则您必须执行类似audited_type.constantize.find(audited_id)的操作。@Luke,谢谢,但我不确定我是否遵循了。。。上面的代码示例正确吗?如果没有,你有什么办法更新你的答案吗?另外,你是说我需要确保我有自己的归属,照片模型的模型中有很多关系吗?thxsLuke,谢谢你解释得这么好。我想我现在已经了解了一般的概念,但出于某种原因,我正在努力让它发挥作用。我用我的特定代码更新了问题。如果你看到我做错了什么,你能告诉我吗?还有一件事,上面给出了错误“NilClass:Class的未定义方法'model_name'”啊,我想它不起作用的原因是我在表中有一些多态关联的空记录。。。我想如果它是空的,它就会失败。。非常感谢。
<%= link_to 'Here she is', polymorphic_path(audit_log.auditable) %>
class AuditLog
...
def audited_path
"/#{self.audited_type.tableize}/#{self.audited_id}"
end