Will
Will

Reputation: 4693

Rails Form element to convey two values

I have a form that takes bookings for an event for people. The form displays events vertically, and a name & checkbox for each of the possible people next to each event.

How should I best convey the two pieces of information that i need per checkbox? that is, the event_id and the person_id

Upvotes: 0

Views: 44

Answers (3)

Will
Will

Reputation: 4693

I ended up doing this:

 <%= check_box_tag  "booking[]", "#{event.id}-#{person.id}" %>   

and then in then to process them:

params[:booking].each do |booking|
    booking = booking.split('-')
    a = {
        :booking_id  => @booking.id,
            :person_id    => booking[1],
            :event_id    => booking[0]          
   }
   Appointment.create(a)      
end 

I was hoping for a more railish way to do it but this works.

Upvotes: 0

pex
pex

Reputation: 7731

I'm not totally sure wether I got you right. This is the model I assume you're talking about:

# event.rb

class Event
  has_many :people
  scope :possible_people, -> { #whatever .. }
end

# person.rb

class Person
  belongs_to :event
end

# events_controller.rb

class EventsController
  def index
    @events = Event.all
  end
end

And this might be a possible solution to change an events relation to people:

# index.html.erb

<ul id="events">
  <% @events.each do |event| %>
    <li class="event">
      <%= form_for @event do |form| %>
        <% event.possible_people.each do |person| %>
          <%= check_box_tag "event[person_ids][]", person.id, @event.people.include?(person) %>
        <% end %>
        <%= f.submit_tag 'Save Event' %>
      <% end %>
    </li>
  <% end %>
</ul>

The important part is <%= check_box_tag "event[person_ids][]", person.id, @event.people.include?(person) %> where you actually change the the relation of a specific person to the event.

Good luck ;)

Upvotes: 2

AnkitG
AnkitG

Reputation: 6568

Well, you can try out something like below line, I am assuming you have a multiselect checkboxes and i am passing a Hash of event_id => plate_id as value to checkbox.

<%= check_box_tag 'booking[event_people_ids][]', {booking.event_id => booking.plate_id} %>

You will get the value in params as:

booking => {event_people_ids =>["{"72"=>"3"}}

Upvotes: 0

Related Questions