2017-08-08 6 views
0

ユーザーが管理者でないとき、またはuser_idがcurrent_user idと等しくないとき、またはユーザーオブジェクトが空白のときに、メソッドに対してfalseを返そうとしています。 これを行うには最良の方法かどうかを知りたいですか?3条件が満たされないときにfalseを返す

def self.get_user_id(fname,lname) 
    user_id = User.where("fname=? AND lname=?",fname,lname).pluck(:id) 
    current_user = User.current.id 
    return false if [email protected]_admin? || (user_id != curent_user) || user_id.blank? 
    user_id 
end 
+0

あなたは何を得ていますか? – MZaragoza

+0

'!@timesheet_admin?'、 '(user_id!= curent_user)'と 'user_id.blank? 'の値は何ですか? – MZaragoza

答えて

0

に評価するので、単に評価された式を返すために、それを短縮することができるはずですIDの配列。また、id変数をレコードのように指定すると、混乱する可能性があります。最初にそれを掃除しようとしましょう。

ステップ1

def self.get_user_id(fname,lname) 
    user_id = User.find_by(fname: fname, lname: lname).id 
    current_user_id = User.current.id 

    return false if [email protected]_admin? || (user_id != current_user_id) || user_id.blank? 

    user_id 
end 

さて、今はもう少しロジックを見ることができます。ここにはクラスインスタンス変数がありますが、これは最悪でも危険であると思われ、よく理解するのは難しいです。それはあなたの問題の一部かもしれません。そうではないとしましょう。このロジックをより読みやすくするための別の方法があります。

ステップ2

def self.invalid_id?(user_id, current_user_id) 
    [email protected]_admin? || 
    user_id != current_user_id || 
    user_id.blank? 
end 

def self.get_user_id(fname,lname) 
    user_id = User.find_by(fname: fname, lname: lname).id 
    current_user_id = User.current.id 

    invalid_id?(user_id, current_user_id) ? false : user_id 
end 
0

あなたはそれはあなたが戻ってきている現在、あなたのコード内の問題を持っているブール

return [email protected]_admin? || (user_id != curent_user) || user_id.blank?

関連する問題