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

Gee*_*ess 2 ruby model-view-controller ruby-on-rails parameter-passing ruby-on-rails-5

现在,我有了它,以便当用户从 中选择一个选项时collection_select,会根据event_id他们的选择填充一个 div 。根据Event,将显示多个EventOption,每个都有自己独特的 ID。(我有EventOptionas belongs_to Eventhas_many他们中的每一个。)

当他们选择一个时,这是我通过 JS/Ajax 填充的内容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>
Run Code Online (Sandbox Code Playgroud)

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

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

Bil*_*hty 5

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

book_now_path(:event => @event.id, :event_option_id => e.id)
Run Code Online (Sandbox Code Playgroud)

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

@event_option_id = params[:event_option_id]
Run Code Online (Sandbox Code Playgroud)

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