2009-08-11 7 views
1

i ai deux collection_selects identiques sur une seule page (un seul message appartenant à 2 groupes)collection_select valeur sélectionnée

<%= 
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][]'}) 
%> 

est-il possible de définir deux valeurs sélectionnées différentes pour les utiliser collection_select?

modifier:

je suppose que je dois faire quelque chose comme

<% 
@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][]'}) 
%> 

mais bien sûr, cela ne fonctionne pas et donne méthode manque erreur

Edit2:

impossible de le faire avec collection_select. sauf si le groupe a une méthode, renvoyer un seul identifiant de groupe à chaque fois.

ce que je fini avec est

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

La première question est pourquoi essayez-vous cela? –

+0

question était un exemple, ce que je suis en train d'essayer de faire est <% @ message.groups.each faire | %> <% = collection_select (: message, group.id, Group.find (: tous) ,: id,: title, {}, {: name => 'message [group_ids] []'}) %> <% fin %> un message a relation HABTM avec des groupes, il a donc méthode group_ids, mais collection_select ne me permet pas d'utiliser group.id, ou: mot-clé sélectionné Merci pour un commentaire, mais Je pense que je vais utiliser une autre solution (j'ai ajouté modifier à la question). –

Répondre

5

Vous devez configurer vos modèles et les relations comme ceci:

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 

Puis dans votre formulaire ...

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

Et voici mes migrations pour l'exhaustivité

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 

Espérons que cela aide ...!

+0

On dirait une relation has_and_belongs_to_many avec moi. En outre, la migration n'est-elle pas destinée à lire "create_table: message_groups: id => false do | t |" ou vous obtiendrez des erreurs funky? – askegg

+0

Stratch cela. : id => false n'est valide que pour les relations HABTM. Le code ci-dessus est cool. – askegg

+0

Merci askegg: D – Chalkers

Questions connexes