Rails表单元素传达两个值

时间:2013-08-09 07:59:16

标签: ruby-on-rails forms simple-form

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

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

3 个答案:

答案 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 

我希望以更多的方式来做这件事,但这很有效。