我是新手Ruby用户,我对这部分的正确写作犹豫不决:
<% if session[:user_id].nil? || (params[:controller] != 'home' && params[:action] != 'index') %>
something
<% else %>
something else
<% end %>
但IF构造的第一部分是错误的(尤其是 params 部分)。如果我试过这个:
<% if params[:controller] != 'home' && params[:action] != 'index' %>
所以我得到了不好的结果,但是如果这样:
<% unless params[:controller] == 'home' && params[:action] == 'index' %>
所以现在我已经取得了不错的成绩......
哪里可能有问题?什么可能是错的?第一个代码是我需要的,但我不知道,如何加入所有内容......
答案 0 :(得分:4)
A != B AND C != D
与!(A == B AND C == D)
只有当 BOTH 对不同时,第一个才是真的。如果 EITHER 对不同,则第二个为真。在您的示例中,要将除非转换为如果您执行以下操作:
<% if params[:controller] != 'home' || params[:action] != 'index' %>
如果EITHER不匹配,则条件为真。
答案 1 :(得分:2)
如果这对您有用:
<% unless params[:controller] == 'home' && params[:action] == 'index' %>
与if
等效的内容为:
<% if !(params[:controller] == 'home' && params[:action] == 'index') %>
将这种否定传递给你:
<% if params[:controller] != 'home' || params[:action] != 'index' %>
请注意,不仅==
成为!=
而且 &&
变为 ||