【发布时间】:2017-05-30 21:30:47
【问题描述】:
环境 - Rails 4.2、Ruby 2.3
尝试使用范围,并从非用户模型/控制器内部创建一个将为 current_user 的 user.superuser 返回 true 或 false。当 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
list.html.haml
%h5
= "Is the user a superuser? #{Appliance.superuser(current_user).to_s}"
Rails 控制台,用于查询超级用户属性设置为 true 的用户
irb(main):006:0* current_user = User.first User Load ... #<User id: 3, superuser: true>
irb(main):007:0> Appliance.superuser(current_user)
=> 是的
Rails 控制台,用于查询超级用户属性设置为 false 的用户
irb(main):008:0> current_user = User.last User Load # User id: 6, superuser: false>
irb(main):010:0* Appliance.superuser(current_user)
设备负载 (4.1ms) SELECT "appliances".* FROM "appliances"
=>#ActiveRecord::Relation [#Appliance id:1, ... updated_at: "...">, #Appliance id:2, ... updated_at: "...">]>
基本上它是转储 Appliance.all 并返回 ActiveRecord_relation 而不是 false。谁能解释为什么会这样?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4