ArgumentError递归数组连接

时间:2012-06-06 10:53:22

标签: ruby-on-rails ruby

使用数组作为参数在控制器或模板中调用方法“polymorphic_url”,如:

polymorphic_url([@agency, @agency.divisions.first])

导致名为“递归数组连接”的ArgumentError异常。有什么建议吗?

我可以使用任何模型重现此异常:

@e = Estate.where(:booklets => {'$exists' => true}).first
@b = @e.booklets.first
polymorphic_url [@e,@b]

rails 3.2.3,3.2.4,3.2.5

ruby​​ 1.9.2,1.9.3

3 个答案:

答案 0 :(得分:2)

您可以使用包含对自身的引用的数组创建错误:

a = []
a<<a
a.join #ArgumentError: recursive array join

我在这里猜测,但如果divisions指向与@agencie相同的数组(例如一个代理商是它自己的分部),我可以想象上面发生的事情。可能是它与更新没有任何关系,但与数据有关。

答案 1 :(得分:0)

我相信你是在滥用它。根据APIDock,以下是一些使用polymorphic_url的例子:

# calls post_url(post)
polymorphic_url(post) # => "http://example.com/posts/1"
polymorphic_url([blog, post]) # => "http://example.com/blogs/1/posts/1"
polymorphic_url([:admin, blog, post]) # => "http://example.com/admin/blogs/1/posts/1"
polymorphic_url([user, :blog, post]) # => "http://example.com/users/1/blog/posts/1"
polymorphic_url(Comment) # => "http://example.com/comments"

所以也许你应该使用:

polymorphic_url([@agency, @division])

答案 2 :(得分:0)

我通过强制应用程序使用bson'1.6.2来解决这个问题 https://github.com/mongoid/mongoid/issues/2069