我有一个表格,可以为人们预订活动。该表单垂直显示事件,并在每个事件旁边为每个可能的人显示名称和复选框。
我应该如何最好地传达每个复选框所需的两条信息?即 event_id 和 person_id
我有一个表格,可以为人们预订活动。该表单垂直显示事件,并在每个事件旁边为每个可能的人显示名称和复选框。
我应该如何最好地传达每个复选框所需的两条信息?即 event_id 和 person_id
我不完全确定我是否正确。这是我假设您正在谈论的模型:
# 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) %>
您实际更改特定人与事件的关系的地方。
祝你好运 ;)
好吧,您可以尝试以下行,我假设您有一个多选复选框,并且我将event_id => plate_id
作为值的哈希传递给复选框。
<%= check_box_tag 'booking[event_people_ids][]', {booking.event_id => booking.plate_id} %>
您将在 params 中获得如下值:
booking => {event_people_ids =>["{"72"=>"3"}}
我最终这样做了:
<%= 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
我希望有一种更疯狂的方式来做到这一点,但这很有效。