Rails - 将数据从视图传递到另一个控制器

时间:2017-04-05 11:11:37

标签: ruby-on-rails

我对rails很新,所以任何帮助都会非常感激。

我有一个页面显示食物清单(每种食物都有自己的ID)。显示的食物清单将根据所选的餐厅而有所不同(从数据库中查询,因此其动态)。在此页面中,用户可以输入他们想要的每种食物的数量。

以下是我设置的控制器和视图:

  • 控制器:菜单和订单摘要
  • 观看次数:menu / show.html.erb和order_summary / index.html.erb

我想显示用户在order_summary / index.html.erb中输入的每种食物的数量。

我的问题是在用户输入数量输入后,如何将输入值与食品ID一起传递到订单汇总控制器?

以下是视图菜单/ show.html.erb

的代码片段

<% @menu_appetizer.each do |appetizer| %>
<div class="food-info">
    <div class="food-title"><%= appetizer.name %></div>
    <p class="food-description"><%= appetizer.description %></p>
</div>
<div class="food-price">
    <span class="price">RM<%= appetizer.price %></span>
</div>
<input type="number" min="0" class="quantity-input" data-price="<%=appetizer.price%>" data-food-id="<%=appetizer.id%>">
<% end %>

<%= link_to 'CONTINUE', {:controller => "order_summary", :action => "index"} %>

3 个答案:

答案 0 :(得分:0)

您必须将带有食品名称和数量的表格(form_for)作为输入标签,并将其提交给订单控制员。

OR

您可以在点击按钮时使用AJAX并将数据传递给订购控制器。

答案 1 :(得分:0)

索引页面通常用于显示给定表格中的每个项目(或至少一个选择)。听起来您正在寻找显示特定订单摘要,因此最好不要进入order_summary / show.html。

这意味着您的order_summary控制器中有一个单独的操作,您可以在其中获取订单摘要并将其提供给视图。如果您以标准方式设置路线,则可以从params [:id]或params [:order_summary_id]获取订单摘要:

def show
  @order_summary = OrderSummary.find(params[:id])
end

这允许您从视图中访问@order_summary。根据您设置模型的方式,这意味着您可以说:

<% @order_summary.items.each do |item| %>
  <div class="food-info">
    <div class="food-title"><%= item.name %></div>
    <p class="food-description"><%= item.description %></p>
  </div>
  <div class="food-price">
    <span class="price">RM<%= item.price %></span>
  </div>
  <input type="number" min="0" class="quantity-input" data-price="<%=appetizer.price%>" data-food-id="<%=appetizer.id%>">
<% end %>

其中,假设您已将订单摘要设置为包含许多项目,则会显示以上信息。

答案 2 :(得分:0)

你应该使用AJAX传递对你的页面也有好处的数据,因为使用AJAX它可以在不加载的情况下获取数据。