Rails 4 grouped_collection_select,带有用于排序的范围

时间:2014-02-26 16:16:32

标签: ruby-on-rails scope formbuilder

我曾经在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>

这似乎与范围仅允许作为callables这一事实有关。我的模型看起来像这样:

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,因为它需要很多地方来覆盖这个默认范围。

2 个答案:

答案 0 :(得分:0)

您可能已经找到了这个问题的答案。但我认为您应该使用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让它按您想要的方式工作?

答案 1 :(得分:0)

我通过创建一个结合两个范围的函数children_ordered来解决这个问题。