2

次のように 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 テーブルを介して実際の関係を表示するように編集されました。

4

2 に答える 2

5

これが私が最終的にたどり着いたものです...

<%= 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

これが他の誰かに役立つことを願っています。

于 2012-06-06T16:01:27.960 に答える
2

それを単純な1対5の関係として見ると、

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 ) %>

これを機能させるには、特定のタイプのすべてのページを検索するメカニズムが必要です。

于 2012-06-04T18:28:52.010 に答える