我有一张表格可以为人们预订活动。表单垂直显示事件,名称和名称。每个事件旁边的每个可能的人的复选框。
我应该如何最好地传达每个复选框所需的两条信息?也就是event_id和person_id
答案 0 :(得分: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) %>
,您实际上会更改特定人与事件的关系。
答案 1 :(得分: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"}}
答案 2 :(得分: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
我希望以更多的方式来做这件事,但这很有效。