Rails - 使用grouped_collection_select排序

时间:2013-05-20 06:48:14

标签: ruby-on-rails sorting select

输入选择框根据另一个输入选择框的选择显示issues列表,该列表显示我School.rb中的值模型。但是,这会列出issue_id的issues。我需要它按字母顺序列出name模型的Issue.rb列并对其进行排序。

我已经尝试过我能想到的每一种组合!

提前致谢..

<%= f.grouped_collection_select :issue_id, School.all, :issues, :name, :id, :name, :prompt => ""%>

4 个答案:

答案 0 :(得分:3)

在没有看到你的模特的情况下在黑暗中拍摄:

<%= f.grouped_collection_select :issue_id, School.all, :issues, :name, :id, :name, :include_blank => true %>

然后为您的问题模型添加默认范围。

default_scope :order => 'issues.name ASC'

答案 1 :(得分:1)

我会犹豫是否要进入一般的默认范围,尽管在这种情况下可能是良性的。相反,您只需在学校模型上添加一个方法,然后从选择中调用它。

中的

<%= f.grouped_collection_select :issue_id, School.all, :ordered_issues, :name, :id, :name, :prompt => ""%>

在school.rb:

def ordered_issues
  issues.order(:name)
end

您还可以通过在表单中​​传递School.order(:name)来按字母顺序排列学校。

答案 2 :(得分:0)

试试吧,

<%= f.select("issue_id", School.find(:all, :order => "name").collect {|p| [ p.name, p.id ] }, {:include_blank => 'None'}) %>

答案 3 :(得分:0)

Rails 5 弃用了@Larry McKenzie 答案的语法。现在变成:

default_scope { order('issues.name ASC') }