[英]Ruby: condition in multiple lines
在其他编程语言中,我可以通过在逻辑运算符中将条件分解成几行,但是在ruby中(我正在使用rails),似乎没有。 是有关代码还是有关语法?
<% if (current_user && current_user.id == @user.id)
|| @user.profile_privacy === 0
|| (@user.profile_privacy === 1
&& current_user
&& current_user.user_friendships.find_by_friend_id(@user.id)
&& current_user.user_friendships.find_by_friend_id(@user.id).state == true ) %>
您不应在视图中拥有所有逻辑,但要修复代码,请将运算符移到行尾:
<% if (current_user && current_user.id == @user.id) ||
@user.profile_privacy === 0 ||
(@user.profile_privacy === 1 &&
current_user &&
current_user.user_friendships.find_by_friend_id(@user.id) &&
current_user.user_friendships.find_by_friend_id(@user.id).state == true )
%>
您应该尝试将尽可能多的逻辑排除在模板之外。
例如,您可以将一些逻辑移到User
模型中:
class User < ActiveRecord::Base
def has_user_as_friend user
user_friendships.find_by_friend_id(user).state == true
end
def is_private
profile_privacy === 0
end
end
您可以将其中的一些移动到控制器中:
def show
@user = User.find(params[:id])
@is_current_user = current_user.id == @user.id
end
然后,您的情况可能会变得简单一些:
<% if (@is_current_user || @user.is_private) %>
我没有完全复制您的条件,但是希望这会给您一些有关如何简化if
语句的想法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.