1

我正在努力使用 Rails button_to。

本质上,我正在实现类似食物日记的东西,以跟踪用户一天摄入的食物的卡路里、蛋白质等。我有我的营养页面,用户点击添加项目。这会打开一个引导模式,用户在其中输入搜索栏,然后点击搜索。这会将他们带到一个结果页面,该页面显示多达 20 种不同的产品,用户可以在其中单击每个产品,然后会出现一个包含所单击产品详细信息的模式。在这个模式上,我还包括一个按钮来将该项目添加到他们的日记中,这个按钮应该调用一个名为 createmeal 的控制器方法

def createmeal(product, quantity)
        @user = current_user
        @user.journal_date = Time.now
        food = FoodItem.new(:brand => product.brand,
                            :item =>  product.item,
                            :qty => product.qty,
                            :unit => product.unit,
                            :cal => product.cal,
                            :carb => product.carb,
                            :sod => product.sod,
                            :dfib => product.dfib,
                            :prot => product.prot,
                            :totalfats => product.totalfats,
                            :satfats => product.satfats,
                            :sugars => product.sugars,
                            :chol => product.chol,
                            :iron => product.iron,
                            :calcium => product.calcium)
        food.save
        meal = Meal.new(:user_id => @user.id, :food_item_id => food.id, :date => @user.journal_date, :meal_type => Rails.cache.read('meal-type'), :qty => quantity)
        meal.save

    end

添加按钮也应该将用户返回到营养页面,所以我尝试了这样的操作:

<div class="header_texture_tracking"></div>
<div class="landing_main_quote_tracking">TRACK</div>
<div class="header_subtitle_tracking">nutrition, fitness and progress</div>

<%= form_tag searchresults_path, :method => 'get' do %>
  <p style=" position: absolute;
          top: 300px;
          left: 500px;"> 
    <%= text_field_tag :search, params[:search], inputhtml: {:class => 'searchtf'}%>
    <%= submit_tag "Search", :name => nil, inputhtml: {:class => 'btn btn-primary'} %>
 </p>
<% end %>   


<div class="resultsdiv">
  <% if @prods %>
      <p style="font-family: 'Lane - Narrow';
            color: rgb( 78, 83, 82 ); 
            font-size: 20px;
            position: absolute;
            left: -180px;">
            Showing  search results for <%= @search %>: 
      </p>
      <%  @prods.each do |f| %>
        <a  data-toggle="modal" href=<%="#"+"#{f.id}"+"item-details"%>><div class="results_box">
        <p class="itemresult"><%= f.item %></p><br/><br/>
        <p class="itemdetails"><%= f.brand %>, <%= f.qty %><%= f.unit  %>, <%= f.cal %> calories</p>
    </div></a>
    <% end %>
    <%= @search = '' %>
 <% end %>

<% if @prods %>
    <%  @prods.each do |f| %>
        <div class="modal fade" id=<%="#{f.id}"+"item-details" %> >

            <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
                    <h4 class="modal-title" id = 'resultsDetailsHeaderBox'><p class="resultsDetailsName"><%= f.item %></p></h4>
                </div>
                    <div class="modal-body">
                        Brand: <%= f.brand %> 
                        Serving size: <%= f.qty %><%= f.unit  %>
                        Calories: <%= f.cal %> 
                   </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>

                    <%= button_to 'ADD', nutrition_path, {action: "createmeal(f,1)"}%>

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

最后,我尝试了不同的组合,包括使用辅助方法,但是就目前而言,它根本不调用方法 createmeal。如果我这样尝试:

<%= button_to 'ADD', nutrition_path, {action: createmeal(f,1)}%>

它调用结果页面中所有产品的方法,而不是在模式中选择的产品。

您对如何制作有任何建议,以便仅对所选产品调用该方法并随后重定向到营养页面?

4

0 回答 0