我正在努力使用 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">×</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)}%>
它调用结果页面中所有产品的方法,而不是在模式中选择的产品。
您对如何制作有任何建议,以便仅对所选产品调用该方法并随后重定向到营养页面?