2017-01-16 7 views
0

環境のスコープを使用して - 、非ユーザーの中から、CURRENT_USERのuser.superuserためにtrueまたはfalseを返します1をスコープと遊ぶし、作成しようとすると、Rubyの2.3予期しない出力

を4.2レールモデル/コントローラ。私はcurrent_user.superuser = trueのときに期待される出力を得ていますが、falseはちょうど左のフィールドに出ます。

内訳照会する場合の

appliance.rb(モデル)

scope :superuser, ->(user) { user.superuser ? true : false } 

appliance_controller.rb

def list 
    @appliances = Appliance.all.order(:idtag) 
    @users = User.all 
end 

%h5 
    = "Is the user a superuser? #{Appliance.superuser(current_user).to_s}" 
list.html.hamlレールコンソールau 007:0> Appliance.superuser(CURRENT_USER)

=>真

のRailsコンソール真

irb(main):006:0* current_user = User.first User Load ... #<User id: 3, superuser: true> 

IRB(メイン)に設定し、スーパーユーザ属性を持つSERスーパーユーザー属性がfalseに設定されているユーザーにクエリを実行します。

irb(main):008:0> current_user = User.last User Load # User id: 6, superuser: false> 

IRB(メイン):010:0 * Appliance.superuser(CURRENT_USER)

アプライアンスロード(4.1ms)は、 "アプライアンス" をSELECT * "家電"

=>#のActiveRecord ::関係[#FROM。アプライアンスID:1、... updated_at: "...">、#Appliance ID:2、... updated_at: "...">]>

基本的にAppliance.allをダンプして返しますfalseではなくActiveRecord_relationなぜこれが起こっているのか誰も説明できますか?レールapi 1として

答えて

0

スコープのオブジェクトを検索し、照会のためのクラスメソッドを追加します。このメソッドは、他のスコープと組み合わせ可能なActiveRecord :: Relationオブジェクトを返すことを意図しています。 nilまたはfalseを返した場合は、代わりにすべてのスコープが返されます。

これは予想外のことではなく、正確に予想される動作です。スコープはfalseを返し、allスコープを適用し、​​のすべてのレコード(activerecord relationオブジェクト)をapiに記載されているとおりにダンプします。

+0

私はそれを読んで覚えていますが、私はそれを完全に理解していなかったと思います。 – Bayless

+0

問題ありません。時々、私と一緒にも起こる。 – Sajan

関連する問題