ruby-on-rails-3 - Mongoid动态查询

标签 ruby-on-rails-3 mongoid

这一定是一件容易的事,但我被困住了...... 因此,我将 Rails#3 与 Mongoid 结合使用,并希望动态构建依赖于传递的参数的查询,然后然后执行 find()。 类似的东西

def select_posts
    query = :all # pseudo-code here
    if (params.has_key?(:author))
        query += where(:author => params[:author]) # this is pseudo-code again
    end

    if (params.has_key?(:post_date))
        query += where(:create_date => params[:post_date]) # stay with me
    end

    @post_bodies = []
    Post.find(query).each do |post| # last one
        @post_bodies << post.body
    end

    respond_to do |format|
        format.html
        format.json { render :json => @post_bodies }
    end
end

最佳答案

这里有几个不同的选项可供选择 - 取决于您的实际应用程序的复杂程度。直接使用您的示例 - 您最终可能会得到类似的结果:

query = Post.all
query = query.where(:author => params[:author]) if params.has_key?(:author)
query = query.where(:create_date => params[:post_date]) if params.has_key?(:post_date)
@post_bodies = query.map{|post| post.body}

这是有效的,因为 Mongoid 中的查询(条件)是可链接的。


或者,如果您想要利用更多字段,您可以执行以下操作:

query = Post.all
fields = {:author => :author, :post_date => :create_date}
fields.each do |params_field, model_field|
  query = query.where(model_field => params[params_field]) if params.has_key?(params_field)
end
@post_bodies = query.map{|post| post.body}

最后,您可以更进一步,正确嵌套表单参数,并命名参数,使其与您的模型匹配,以便您的 params 对象看起来像这样:

params[:post] = {:author => "John Smith", :create_date => "1/1/1970", :another_field => "Lorem ipsum"}

那么你可以这样做:

@post_bodies = Post.where(params[:post]).map{|post| post.body}

当然,对于最后一个示例,您需要清理输入字段 - 以防止恶意用户篡改行为。

关于ruby-on-rails-3 - Mongoid动态查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14876970/

相关文章:

ruby-on-rails - rails 3 : What CSS styles are expected by Rails?

ruby-on-rails - Mongoid 标签 - 从模型中收集独特的数组项

ruby-on-rails-3 - Heroku 和 MongoHQ: ActionView::Template::Error (操作: #<Moped::Protocol::Commands::Authenticate 失败,错误 "auth fails")

ruby - 没有框架的ruby上的mongoid配置

ruby-on-rails - 如何正确制作 Mongoid 订单?

database - 创建对象 Rails、Postgresql 时无法将其他表中的 ID 保存到数据库中的当前表中

ruby-on-rails-3 - EC2 上的 Rails 3 服务器

ruby-on-rails - 为什么在 Heroku 上,如果我点击 "About your application’ s environment”,它会说找不到页面?

ruby-on-rails-3 - 如何使用 Mocha 和 rspec 测试模型错误?

mongoid - 在Mongoid中使用create时如何定义数组字段?