grouped_collection_select
方法不是您需要的最佳工具,因爲它確實處理主記錄的關聯記錄,而如果我理解正確,您只需將所有Conversation
記錄添加到選擇標記,但是按其屬性,而不是關聯。
不過,您可以輕鬆地手動構建分組選項。我把這個代碼放到一個幫手不弄亂視圖模板太多:
# app/helpers/conversations_helper.rb
module ConversationsHelper
def grouped_conversations_options_for_select(selected_conversation_id = nil)
options = {}
Conversation.statuses.keys.each do |status|
options[status] = Conversation.with_status(status).pluck(:name, :id)
end
grouped_options_for_select(options, selected_conversation_id)
end
end
# app/view/show.html.erb
<%= select_tag :conversation_id, grouped_conversations_options_for_select(params[:conversation_id]) %>
助手首先構造一個哈希結構如下:
{
active: [[ conversation.id, conversation.name ], [...]],
archived: [[ conversation.id, conversation.name ], [...]],
}
此散列可以再傳給grouped_options_for_select
將其轉換爲<OPTIONS>
標籤,其中包括正確的<OPTGROUP>
標籤。助手還支持在選擇選項中設置當前選定的值。其輸出然後傳遞給視圖模板中的選擇標記。
對於幫手的工作,還需要以下範圍添加到Conversation
型號:
# app/models/conversation.rb
scope :with_status, ->(status) { where(status: statuses[status]) }
所有的會話表中的記錄,記錄的不是對話? –