2012-06-04 3 views
2

Я пытаюсь получить grouped_collection_select со следующимRails - grouped_collection_select

class User 
    has_many :pages, :through => pages_users 
end 

class Page 
    has_many :users, :through => pages_users 
    # name - String 
    # type - String 
end 

class PagesUser < ActiveRecord::Base 
    belongs_to :page 
    belongs_to :user 
end 

и я хочу выпадающий сгруппированных по типу с именем внизу. Пример, который я видел с городом/страной/континентом, не так полезен, как хотелось бы. Каков наилучший способ сделать это? Я думаю, что хочу что-то вроде ...

<%= grouped_collection_select(:user, :page_id, user.pages, :type, :name,) %> 

, но это, очевидно, неверно.

Любые мысли?

Отредактировано, чтобы показать фактические отношения через таблицу pages_users.

+0

страница имеет много страниц? ok – fl00r

+0

Должно быть has_many пользователей (теперь исправлено). – slabounty

ответ

4

Вот что я, наконец, закончил с ...

<%= select_tag 'page_id', grouped_options_for_select(Page.for_select) %> 

где Page.for_select выглядит как ...

def for_select 
    { 
    'Type 1' => type1.map { |p| [p.name, p.id] }, 
    'Type 2' => type2.map { |p| [p.name, p.id] } 
    } 
end 

Надеется, что это помогает кому-то еще.

+1

Я думаю, что это не очень хорошая идея, поставьте 'for_select' метод в модель. Должен быть вспомогательный метод –

2

Глядя на него в качестве простого отношения один-к-МАЕ,

class User 
    has_many :pages 
end 

class Page 
    # name - String 
    # type - String 
end 

<%= grouped_collection_select(:user, :page_id, user.pages.map(&:type), :pages_by_type, :name, :id, :name) %> 

Для этого, чтобы работать, вам нужен механизм, чтобы найти все страницы для данного типа.

+0

Пожалуйста, см. Мои правки и извините за путаницу. – slabounty

+0

Если это отношение many_to_many, измените их на has_and_belongs_to_many, как показано. У вас есть третья таблица отношений users_pages? – Anil

+0

Да, в миксе есть таблица pages_users. По-видимому, я не должен был так стараться. Наверное, мне интересно, почему важно отношение страницы к пользователю. Меня действительно интересуют только те страницы, которые есть у пользователя. Я что-то упускаю? Кроме того, почему collection_select в отличие от grouped_selection_select? – slabounty

Смежные вопросы