Pie*_*ult 9 activerecord ruby-on-rails-3
是否可以通过此动态查询创建更清晰的东西:
@photos = Photo.within(100, :origin => [params[:latitude], params[:longitude]]) unless (params[:latitude].nil? || params[:longitude].nil?)
if @photos.nil? then
conditions = String.new
values = Array.new
params.each_key do |key|
if key == 'since_id' then
conditions << " AND " unless conditions.length == 0
conditions << "id > ?"
values << params[key]
elsif key == 'user_id' then
conditions << " AND " unless conditions.length == 0
conditions << "user_id = ?"
values << params[key]
elsif key == 'id' then
conditions << " AND " unless conditions.length == 0
conditions << "id = ?"
values << params[key]
end
end
values.insert(0, conditions)
@photos = Photo.limit(15).order("created_at DESC").where(values) unless values.nil?
end
Run Code Online (Sandbox Code Playgroud)
Boh*_*dan 15
我认为正确的方法是使用范围
scope :older_than, lambda { |value| where('id > (?)', value) if value }
scope :with_id, lambda { |value| where('id = (?)', value) if value }
scope :for_user, lambda { |value| where('user_id = (?)', value) if value }
Run Code Online (Sandbox Code Playgroud)
后来搜索
@photos = Photo.within(100, :origin => [params[:latitude], params[:longitude]])
unless (params[:latitude].nil? || params[:longitude].nil?)
@photos = Photo.with_id( params[ :id ] )
.older_than( params[ :since_id ] )
.for_user( params[ :user_id ] )
.order("created_at DESC")
.limit(15)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4503 次 |
| 最近记录: |