0

我有一个表格,可以为人们预订活动。该表单垂直显示事件,并在每个事件旁边为每个可能的人显示名称和复选框。

我应该如何最好地传达每个复选框所需的两条信息?即 event_id 和 person_id

4

3 回答 3

2

我不完全确定我是否正确。这是我假设您正在谈论的模型:

# 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

这可能是改变事件与人的关系的可能解决方案:

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

重要的部分是<%= check_box_tag "event[person_ids][]", person.id, @event.people.include?(person) %>您实际更改特定人与事件的关系的地方。

祝你好运 ;)

于 2013-08-09T08:36:02.987 回答
0

好吧,您可以尝试以下行,我假设您有一个多选复选框,并且我将event_id => plate_id作为值的哈希传递给复选框。

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

您将在 params 中获得如下值:

booking => {event_people_ids =>["{"72"=>"3"}}
于 2013-08-09T08:32:46.163 回答
0

我最终这样做了:

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

然后处理它们:

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 

我希望有一种更疯狂的方式来做到这一点,但这很有效。

于 2013-08-11T03:02:20.047 回答