Rails 4 grouped_collection_select с областями для упорядочивания

Раньше у меня работал этот код в Rails 3.2.16:

f.grouped_collection_select :state_id, @states.ordered, 'children.ordered', :name, :id, :name

После обновления до Rails 4.0 я получаю сообщение об ошибке:

undefined method `children.ordered' for #<State:0x007f66498d90f8>

Кажется, это как-то связано с тем, что области действия разрешены только как вызываемые объекты. Моя модель выглядит так:

class State < ActiveRecord::Base
  has_many :children, class_name: 'State', foreign_key: 'parent_id'
  belongs_to :parent, class_name: 'State'

  scope :ordered, -> {
    order(:sequence)
       .order(:name)
  }
end

Кто-нибудь знает, как заставить это работать снова? Я не могу использовать default_scope здесь, потому что для переопределения этой области по умолчанию потребуется много места.


person Frank Groeneveld    schedule 26.02.2014    source источник
comment
Вы когда-нибудь находили решение этого? У меня такая же проблема.   -  person Andy Harvey    schedule 10.04.2014
comment
Нет, я сделал функцию, которая перенастраивает дочерние элементы в соответствии с заказом, поэтому функция объединяет две области видимости.   -  person Frank Groeneveld    schedule 17.04.2014


Ответы (2)


Возможно, вы уже нашли ответ на этот вопрос. Но я думаю, что вы должны изменить код с хелпером grouped_collection_select для вызова метода group_method:

f.grouped_collection_select :state_id, @states.ordered, :children, :name, :id, :name

Из документации Rails 4:

grouped_collection_select(object, method, collection, group_method, group_label_method, option_key_method, option_value_method, options = {}, html_options = {})

Обновление:

Я должен был быстро ответить, и вы правы. Возможно, вам придется использовать default_scope, чтобы заставить его работать так, как вы хотите?

person GLindqvist    schedule 29.04.2014
comment
Как ваш ответ упорядочивает детей? Проблема заключалась в том, что больше нельзя использовать область :ordered. - person Frank Groeneveld; 01.05.2014
comment
Смотрите мое обновление, может вам не помочь. Я буду продолжать исследовать это больше. Странно, что вы больше не можете использовать область действия с grouped_colelction_select. - person GLindqvist; 02.05.2014
comment
См. исходный пост: здесь я не могу использовать default_scope, потому что для переопределения этой области по умолчанию потребуется много места. - person Frank Groeneveld; 20.05.2014

Я исправил это, создав функцию children_ordered, которая объединяет обе области.

person Frank Groeneveld    schedule 29.07.2015