我已经' if / else'在我的视图中运行,基于页面的当前URL,并且当前视图显示应该是什么应该是' if'无论是真是假。解释起来有点棘手,我不知道为什么会这样 - 任何解释/解决方案都将不胜感激!
在代码之前,这里有一点背景知识:
(到目前为止,这么直接吗?)
但是,当代码运行时,它正确打印正确的食谱(即法国餐不会出现在/意大利语网址上),但也会打印错误消息。这是代码:
在控制器中:
@url = request.path.split('/')[2] #returning 'italian', 'french', etc.
观点:
<% Recipe.all.each do |recipe| %>
<% recipe.cuisines.each do |recipe_cuisine| %>
<% if recipe_cuisine.name.downcase == @url %>
<p><strong><%= recipe.name.humanize %></strong></p>
<ul>
<% recipe.ingredients.each do |recipe_ingredient| %>
<li><%= recipe_ingredient.name %></li>
<% end %>
</ul>
<p><%= recipe.method %></p>
<% else %>
<p>You've reached an invalid page, please return to <#%= link_to 'the homepage', root_url %></p>
<% end %>
<% end %>
<% end %>
为了澄清,我已经测试了&#39; recipe_cuisine.name.downcase == @ url&#39;代码行,它应该在它应该是的时候返回true,如果它不应该是false。
有谁知道如何解决这个问题?
先谢谢,史蒂夫。
修改
以下是影响此的路线:
Rails.application.routes.draw do
get 'recipes/:cuisine' => 'recipes#cuisine'
resources :recipes
end
答案 0 :(得分:1)
收藏品中有多少种美食?如果有两个,并且其中一个名称等于@url,那么您将看到第一个分支,而任何不等于@url的分支将显示第二个分支。你正在评估每种菜肴的if语句。
答案 1 :(得分:1)
您定义了以下路线:
get 'recipes/:cuisine' => 'recipes#cuisine'
这意味着当您点击/recipes
时,它会使用cuisine
控制器的recipes
操作(感谢'recipes#cuisine'
)。
您还在:cuisine
之后定义了额外的recipes/
,这意味着如果您点击/recipes/italian
,那么您的控制器/视图中将有一个GET参数(名为cuisine
)
以下是如何使用它:
# recipes_controller.rb
def cuisine
@recipes = Recipe.all # (use `Recipe.scoped` if using Rails' version < 4)
if params[:cuisine].present?
@recipes = @recipes.includes(:cuisines).where(cuisines: { name: params[:cuisine] })
end
# other stuff
end
# cuisine.html.erb (view)
<% @recipes.each do |recipe| %>
<p><strong><%= recipe.name.humanize %></strong></p>
<ul>
<% recipe.ingredients.each do |recipe_ingredient| %>
<li><%= recipe_ingredient.name %></li>
<% end %>
</ul>
<p><%= recipe.method %></p>
<% end %>
但是这个逻辑存在一个缺陷:如果我点击/recipes/frenchAndMexicanPlease
怎么办? params[:cusine]
将等于"frenchAndMexicanPlease"
,并且您的数据库没有任何这样的菜单类型。在这种情况下,它根本不显示任何配方,因为查询@recipes.includes(:cuisines).where(cuisines: { name: params[:cuisine] })
与任何现有记录都不匹配。
我显然可以提供有关我使用的代码和逻辑的更多解释。希望这有帮助!