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