2009-08-11 47 views
1

我有一个页面(一个消息属于2组)collection_select选定值

<%= 
collection_select(:message,:group_ids, Group.find(:all),:id, :title, {}, {:name=>'message[group_ids][]'}) 
%> 
<%= 
collection_select(:message,:group_ids, Group.find(:all),:id, :title, {}, {:name=>'message[group_ids][]'}) 
%> 

是有可能为他们使用collection_select设置两个不同的选择的值上的两个相同的collection_selects?

编辑

我想我不得不这样做

<% 
@message.group_id=5 
%> 
<%= 
collection_select(:message,:group_id, Group.find(:all),:id, :title, {}, {:name=>'message[group_ids][]'}) 
%> 
<% 
@message.group_id=6 
%> 
<%= 
collection_select(:message,:group_id, Group.find(:all),:id, :title, {}, {:name=>'message[group_ids][]'}) 
%> 

,但当然这是行不通的,并给出方法缺少错误

EDIT2

猜测有没有办法用collection_select来做到这一点。除非组有方法,否则每次都返回一个group_id。

我结束了同是

select_tag 'message[group_ids][]', "<option></option>"+options_from_collection_for_select(Group.find(:all), 'id', 'title',group1.id) 
select_tag 'message[group_ids][]', "<option></option>"+options_from_collection_for_select(Group.find(:all), 'id', 'title',group2.id) 
+0

第一个问题是你为什么试图这样做? – 2009-08-11 13:36:23

+0

问题是一个例子,我实际上试图做的是 <% @ message.groups.each do | group | %> <%= collection_select(:message,group.id,Group.find(:all),:id,:title,{},{:name =>'message [group_ids] []'}) %> <% 端 %> 消息具有基团的habtm关系,所以它有group_ids方法,但collection_select不允许我使用group.id,或:选择的关键词 感谢注释,但我想我会使用另一种解决方案(我添加了编辑问题)。 – 2009-08-11 13:47:09

回答

5

你需要设置你的模型和关系,像这样:

class Message < ActiveRecord::Base 
    has_many :message_groups 
    has_many :groups, :through => :message_groups 
    accepts_nested_attributes_for :message_groups #Note this here! 
end 

class Group < ActiveRecord::Base 
    has_many :message_groups 
    has_many :messages, :through => :message_groups 
end 

class MessageGroup < ActiveRecord::Base 
    belongs_to :group 
    belongs_to :message 
end 
表单中的

则...

<% form_for(@message) do |f| %> 
    <%= f.error_messages %> 
    <% f.fields_for :message_groups do |g| %> 
    <p> 
     <%= g.label :group_id, "Group" %> 
     <%= g.select :group_id, Group.find(:all).collect {|g| [ g.title, g.id ] } %> 
    </p> 
    <% end %> 
    <p> 
    <%= f.submit 'Update' %> 
    </p> 
<% end %> 

这里是我的迁移完整性

class CreateGroups < ActiveRecord::Migration 
    def self.up 
    create_table :groups do |t| 
     t.string :title 
     t.timestamps 
    end 
    end 

    def self.down 
    drop_table :groups 
    end 
end 

class CreateMessages < ActiveRecord::Migration 
    def self.up 
    create_table :messages do |t| 
     t.text :body 
     t.timestamps 
    end 
    end 

    def self.down 
    drop_table :messages 
    end 
end 


class CreateMessageGroups < ActiveRecord::Migration 
    def self.up 
    create_table :message_groups do |t| 
     t.integer :message_id 
     t.integer :group_id 
     t.timestamps 
    end 
    end 

    def self.down 
    drop_table :message_groups 
    end 
end 

希望这有助于...!

+0

看起来像一个has_and_belongs_to_many与我的关系。另外,迁移的目的不是读取“create_table:message_groups:id => false do | t |”或者你会得到时髦的错误? – askegg 2009-08-12 22:09:14

+0

Stratch那。 :id => false仅对HABTM关系有效。上面的代码很酷。 – askegg 2009-08-12 22:32:30

+0

谢谢askegg:D – Chalkers 2009-08-12 22:33:12