2012-06-06 3 views
1

Вызов метода «polymorphic_url» в контроллере или шаблон с массива в качестве аргумента, например:ArgumentError рекурсивный массив присоединиться

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

вызывает исключение ArgumentError с именем «рекурсивный массив присоединиться». Какие-либо предложения?

я могу воспроизвести это исключение с любой из моделей:

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

рельсы 3.2.3, 3.2.4, 3.2.5

рубин 1.9.2, 1.9.3

+0

У меня такая же ошибка на рельсы 3.2.3 с link_to. Ошибка появилась после обновления пакета сегодня утром. Я использую mongo и mongoid, и они были разбиты из-за последнего обновления, но я уже установил более старые версии в Gemfile. Не уверен, что это может вызвать проблемы ... Но я ничего не менял в моделях, представлениях или контроллерах. Я только пытался установить jquery gem и сделать обновление. – Alexander

+0

Я тоже использую мангоид, и, вероятно, проблема появляется после обновления до 2.4.10. Im shure, проблема такая же, потому что «link_to» вызывает «polymorphic_url» для создания url. –

+0

Теперь им нужно использовать мангоид «2.4.8», который работает нормально в производстве, но проблема не решена. –

ответ

0

Im решить эту проблему, заставляя приложения использовать BSON «1.6.2» https://github.com/mongoid/mongoid/issues/2069

+0

Кстати, я обновил до bson 1.6.4 примерно через пару часов. Кажется, это было выпущено сегодня. И он отлично работает. – Alexander

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

Вы можете создать свою ошибку с массивом, который содержит ссылку на себя:

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

Я угадываю здесь, но если divisions указывает на тот же массив, что и @agencie (например, агентство, являющееся его собственным делением), я могу представить себе что-то вроде этого происходит. Может быть, это не имеет ничего общего с обновлениями, но с данными.

Смежные вопросы