I am just beginning with RoR and ran into my first major headscratcher. I have a model "events" which is through "has_and_belongs_to_many" (habtm) connected to a model "event_types", meaning one event can have several event_types and one event_type can belong to several events. First question: is there a better way to solve this relationship? Alright, now when creating a new event I want to show the list of existing event types and let the user choose one or more for the new event through checkboxes. I fiddled around with how to show the text boxes. I am using "form_for :event" so I tried to use "form.check_box" but I couldn''t get it right. I got it (halfway) working with the following but it is not pretty: <% @event_types.each do |event_type| %> <%= check_box_tag "selected_event_types[]", event_type.id, @event.has_event_type_by_id?(event_type.id) %> <label for="selected_event_types[]"><%= event_type.name %></label> | <% end %> And in the events_controller: def new @event = Event.new @event_types = get_all_event_types @locations = get_all_locations end def create @event = Event.new(params[:event]) params[:selected_event_types].each do |event_type_id| @event.add_event_type_by_id(event_type_id) end if @event.save redirect_to_index("Event was successfully created.") else @event_types = get_all_event_types @locations = get_all_locations render :action => :new end end It does work, I get a list of the selected event type ids in params[:selected_event_types] but I am sure there must be a smarter way to do this... Moreover, every checkbox gets the same id ("selected_event_types[]"), so my <label> doesn''t work properly... I am open for all thoughts and ideas! /Zoop -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Ok, I came a bit further in my quest for the perfect solution... In the view I replaced my old code by this: <% @event_types.each do |event_type| %> <%= check_box_tag("event[event_types][]", event_type.id, @event.has_event_type_by_id?(event_type.id), { :id => "event_event_types_#{event_type.id}" }) %> <label for="event_event_types_<%= event_type.id %>"><%= event_type.name %></label> | <% end %> Now I get the event_types in a subarray of params[:event] into my controller. In the controller I want to be able to save the event directly without having to add the selected event types "by hand". So my create function looks like this now: def create @event = Event.new(params[:event]) if @event.save redirect_to_index("Event was successfully created.") else @event_types = get_all_event_types @locations = get_all_locations render :action => :new end end Thus I simply removed the lines params[:selected_event_types].each do |event_type_id| @event.add_event_type_by_id(event_type_id) end The error I get now is "EventType expected, got String" which is understandable since the value of the checkboxes is "event_type.id". Setting the value to "event_type" doesn''t work since i then get "event_type.to_s", the string representation. What to do? -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
I found the solution here -> http://wiki.rubyonrails.org/rails/pages/HowtoUseFormOptionHelpers Look under "Assigning to has_many or has_and_belongs_to_many collections" Changed my code to [...] <%= check_box_tag("event[event_type_ids][]", [...] and now it works fine! -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---