2016-04-09 6 views
0

以下の方法があるとします。 comment.story.teams.firstの結果がnilの場合、このコードを安全にするにはどうすればよいですか?Rails:メソッドチェインのベストプラクティスをチェックしない

私はcomment.story.teams.first.try(:users)を試しましたが、それは道路の下で缶をキックし、割り当てusers -= [@current_user]undefined methodエラーをスローします。

def recipients 
    if comment.commentable_type == "Story" 
     users = comment.story.teams.first.users 
    else 
     users = comment.other_commenters + [comment.commentable_user] 
    end 
    users -= [@current_user] 
    users.uniq 
    end 

ここで使用できるパターンはありますか?

+0

あなたの知性を侮辱しようとしているのではなく、これを考えていない場合は: '' '(users || []) - = [@current_user]' ''またはそれ以前の '' 'users = comment .story.teams.first.try(:users)|| [] '' ' – laertiades

+0

決して侮辱されません。私が頻繁に行うように、言語を切り替えるときのベストプラクティスについてちょっと混乱させました。これはうまくいく。どうも。 – Meltemi

答えて

0

ruby​​のunlessステートメントでチェックする必要があるものをそのままラップします。

unless comment.story.teams.first.nil? 
    ##Execute code in here 
end 

希望します。メソッド内のステートメントの一部を再構成する方が簡単かもしれません。 'Unless'は 'ない場合'のルビ構文です。