繁体   English   中英

Ruby:多行条件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM