Ruby 使用;及;铁路运营商
我有这样的想法:Ruby 使用;及;铁路运营商,ruby,ruby-on-rails-4,Ruby,Ruby On Rails 4,我有这样的想法: @photos = Photo.where(:user_id => @user.id) 我想要像这样的东西: @photos = Photo.where(:user_id => @user.id, :public => 1) 然而,这不起作用。我找不到如何使用“AND”运算符 @photos = Photo.where("user_id = ? AND public = ?", @user_id, 1) 活动记录将帮助您。试试看 @photos = P
@photos = Photo.where(:user_id => @user.id)
我想要像这样的东西:
@photos = Photo.where(:user_id => @user.id, :public => 1)
然而,这不起作用。我找不到如何使用“AND”运算符
@photos = Photo.where("user_id = ? AND public = ?", @user_id, 1)
活动记录将帮助您。试试看
@photos = Photo.where("user_id = ? AND public = ?", @user_id, 1)
Active record将对您有所帮助。您的解决方案应该可以:
Photo.where(user_id: @user.id, public: 1)
生成如下查询(假设MySQL和@user.id
为5):
我怀疑public
是一个布尔字段,根据您的数据库适配器,true
和false
可以存储为1
和0
或存储为t
和f
尝试传递一个布尔值,让Rails处理转换:
Photo.where(user_id: @user.id, public: true)
如果设置关联和一些作用域,则更容易:
class User < ActiveRecord::Base
has_many :photos
end
class Photo < ActiveRecord::Base
belongs_to :user
scope :public, -> { where(public: true) }
scope :private, -> { where(public: false) }
end
您的解决方案应该有效:
Photo.where(user_id: @user.id, public: 1)
生成如下查询(假设MySQL和@user.id
为5):
我怀疑public
是一个布尔字段,根据您的数据库适配器,true
和false
可以存储为1
和0
或存储为t
和f
尝试传递一个布尔值,让Rails处理转换:
Photo.where(user_id: @user.id, public: true)
如果设置关联和一些作用域,则更容易:
class User < ActiveRecord::Base
has_many :photos
end
class Photo < ActiveRecord::Base
belongs_to :user
scope :public, -> { where(public: true) }
scope :private, -> { where(public: false) }
end
数据库并不总是将布尔值存储为
1
或0
所以ActiveRecord规范化了这一点,并且在使用哈希条件时只识别
true
和false
(或nil
)
所有这些查询都是等效的:
@photos = Photo.where("user_id = ? AND public = ?", @user.id, 1)
@photos = Photo.where(user_id: @user.id, public: true)
@photos = Photo.where(user: @user, public: true)
但一般来说,人们更喜欢这样写:
@photos = @user.photos.where(public: true)
数据库并不总是将布尔值存储为
1
或0
所以ActiveRecord规范化了这一点,并且在使用哈希条件时只识别
true
和false
(或nil
)
所有这些查询都是等效的:
@photos = Photo.where("user_id = ? AND public = ?", @user.id, 1)
@photos = Photo.where(user_id: @user.id, public: true)
@photos = Photo.where(user: @user, public: true)
但一般来说,人们更喜欢这样写:
@photos = @user.photos.where(public: true)
你的数据库是什么?activerecord?@Stefan是对的。您的代码是生成和查询的简单方法。它应该有用!你的数据库是什么?activerecord?@Stefan是对的。您的代码是生成和查询的简单方法。它应该有用!OP的查询有什么不同?OP的查询有什么不同?