2016-04-09 13 views
0

Gegeben die folgende Methode. Wie kann man diesen Code am sichersten machen, wenn das Ergebnis comment.story.teams.firstnil sein könnte?Rails: Keine Überprüfung einer Methodenkette Best Practices

Ich habe comment.story.teams.first.try(:users) versucht, aber dann, dass die Dose auf der Straße tritt und die Zuordnung users -= [@current_user] wirft einen undefined method Fehler.

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 

Gibt es ein besseres Muster, das ich hier verwenden könnte?

+0

Falls Sie noch nicht darüber nachgedacht haben (nicht versuchen, Ihre Intelligenz zu beleidigen): '' '(users || []) - = [@current_user]' '' oder früher '' 'users = comment .story.teams.first.try (: Benutzer) || [] '' '' – laertiades

+0

Nie beleidigt. Nur verwirrt über Best Practices beim Wechsel zwischen den Sprachen, wie ich es oft tue. Das funktioniert gut. Danke. – Meltemi

Antwort

0

Umwickeln Sie einfach alles, was Sie brauchen, um in Ruby's einzusteigen, es sei denn, dies ist eine Aussage.

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

Hoffe, dass hilft. Es könnte leichter sein, einige der Anweisungen in der Methode neu zu strukturieren. 'Es sei' ist nur Ruby-Syntax für 'wenn nicht'.