2013-05-20 65 views
2

輸入選擇框顯示基於另一個輸入選擇框顯示在我的School.rb模型值的選擇issues列表。但是,這通過issue_id列出了issues。我需要它按字母順序列出並排序我的Issue.rb模型的name列。導軌 - 順序由具有grouped_collection_select

我試過了所有我能想到的組合!

在此先感謝..

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

回答

3

瞎猜,沒有看到你的模型:

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

然後添加一個默認範圍,您的問題模型。

default_scope :order => 'issues.name ASC' 
+0

謝謝,但我得到這個錯誤:'未定義的方法'合併'爲:name:Symbol' – Devin

+0

現在在我的手機上,所以我不能測試它,但嘗試你的原始方法,不正確的排序,但添加默認範圍到你的模型。 –

+0

作了調整 –

0

只要嘗試,

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

這很接近,並按照字母順序列出它們,但現在我的選擇不會根據第一個選擇輸入框的選擇而縮小。它只是列出了我列中的所有內容。 – Devin

1

我會猶豫是否進入一般的默認範圍,雖然在這種情況下可能是良性的。相反,您可以在學校模型中添加一個方法,並從select中調用它。

在_form

<%= 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)責令學校。