在 Rails 中单击按钮时传递参数

Passing parameters on button click in Rails

现在,当用户从 collection_select 中选择一个选项时,我会根据他们选择的 event_id 填充 div。根据 Event,将显示多个 EventOption,每个都有自己唯一的 ID。 (我有 EventOption 作为 belongs_to Event,其中每个 has_many。)

这是我通过 JS/Ajax 填充的内容,当他们 select 一个 Event:

<div class="center" >
  <h2>Available Options for "<%= @event.name %>":</h2>
    <% @event.event_options.each do |e| %>
      <p><strong>Name:</strong> <%= e.name %> </p>
      <p><strong>Description:</strong> <%= e.description %></p>
      <p><strong>Price:</strong> <%= e.price %></p>
</div>

<div class = "center row">  
  <div class = "col-xs-6">
      <%= link_to "Check Available Dates", root_path, :class => "button", :id => "available-dates-button" %>
  </div>
  <div class = "col-xs-6">
     <%= link_to "Book This Event Now!", book_now_path(:event => @event.id), :id => "book-now-button", :class => "button" %>

  </div>    
      <hr>
    <% end %>
 </div>

我的问题是,当他们单击 Book This Event Now! 时,我可以通过 event_id,但这不是我需要的。我需要传递 :event_option 的特定 :id,但我不知道如何从迭代的 .each 中获取它。

如何确保我的 book_now_path 之后的每个按钮迭代都有一个唯一的 ID,我可以使用它来完成他们的预订?

只需将 event_option.id 添加到您的 book_now_path 助手。

book_now_path(:event => @event.id, :event_option_id => e.id)

然后在控制器动作中它将在参数中:

@event_option_id = params[:event_option_id]

您可以将任何其他参数添加到 Rails 路由助手,只需将它们的名称和值作为键和值添加到助手方法的选项即可。