Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 3-多态路径-如何创建一个给定的表_Ruby On Rails_Ruby On Rails 3_Polymorphic Associations - Fatal编程技术网

Ruby on rails Rails 3-多态路径-如何创建一个给定的表

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

我有一个表AuditLog,其中的字段包括:audited_id | audited_type

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

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

这是照片

我试图使用多态路径,但遇到错误:“Fixnum:Class的未定义方法`model\u name'”

使用时:

<%= 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