我曾经在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,因为它需要很多地方来覆盖这个默认范围。
答案 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
来解决这个问题。