ruby-on-rails-3 - 根据 Rails 3 中传递的参数创建动态查询

标签 ruby-on-rails-3 activerecord

是否可以从此动态查询中创建更清晰的内容:

@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

最佳答案

我认为正确的方法是使用范围

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 }

稍后搜索

@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)

关于ruby-on-rails-3 - 根据 Rails 3 中传递的参数创建动态查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6419472/

相关文章:

ruby-on-rails - 生产模型中的 Rails 3 翻译

ruby-on-rails-3 - 是否有可能在 PostgreSQL 中有一个 hstore 数组

ruby-on-rails - 使用 Factory Girl 进行测试时处理数据库的正确方法

ruby-on-rails - 使用 HMABTM 验证所有权的最佳方式

ruby-on-rails - Rails exec_query 绑定(bind)被忽略

xml - Nokogiri 从 xml 中提取数据

ruby-on-rails - 在 pg_audit_log 中设置 current_user

ruby-on-rails - ActiveRecord 获取所有模型记录以及符合某些条件的记录

database - 与另一个模型或父模型的多态关联

ruby-on-rails - Ruby on Rails-如何检索连接字符串