You are using a wrong operator here.
"status <> ?" equals "status != ?"
Instead you want to use
"status = ?"
Question
Today i want change my Postgres enum to Rails 4.1 enum. I make some steps.
migrations:
create_table :users do |t|
# other column here
t.column :status, :integer
end
in model:
class User < ActiveRecord::Base
enum status: [ :local, :tourist ]
end
now create user:
=> User.create(email: 'ffoo@mai.com', password: '12345678', status: 'local')
=> #<User id: "53621ec84d6163124", email: "ffoo@mai.com", status: 0, ......>
=> u = User.last
=> User Load (0.9ms) SELECT "users".* FROM "users" ........
=> #<User id: "53621ec84d6163124", email: "ffoo@mai.com", status: 0, ......>
=> u.local?
=> true
Try find local users(and now i have strange behavior of my enum):
=> User.where("status <> ?", User.statuses[:local])
=> User Load (0.9ms) SELECT "users".* FROM "users" WHERE (status <> 0)
=> []
WTF?
=> User.where("status <> ?", User.statuses[:tourist])
=> User Load (0.9ms) SELECT "users".* FROM "users" WHERE (status <> 1)
=> #<User id: "53621ec84d6163124", email: "ffoo@mai.com", status: 0, ......>
So problem, this query User.where("status <> ?", User.statuses[:local])
should return my local user. Or i doing something wrong?
La solution
You are using a wrong operator here.
"status <> ?" equals "status != ?"
Instead you want to use
"status = ?"