ruby-on-rails-3 - 如何使Rails 3动态范围成为条件?

标签 ruby-on-rails-3

我想在Rails 3中以传入的参数为条件创建一个动态的命名范围。例如:

class Message < AR::Base
  scope :by_users, lambda {|user_ids| where(:user_id => user_ids) }
end

Message.by_users(user_ids)

但是,我希望能够使用一个空数组的user_ids来调用此作用域,在这种情况下,不应用where。我想在示波器内执行此操作的原因是,我要将其中的几个链接在一起。

我该如何工作?

最佳答案

要回答您的问题,您可以执行以下操作:

scope :by_users, lambda {|user_ids| 
  where(:user_id => user_ids) unless user_ids.empty?
}

但是

我通常只使用scope进行简单的操作(以提高可读性和可维护性),之后使用其他方法,并且我只使用类方法,所以类似:
class Message < ActiveRecord::Base

  def self.by_users(users_id)
    if user_ids.empty?
      scoped
    else
      where(:user_id => users_id)
    end
  end

end

这将在Rails 3中起作用,因为where实际上返回了ActiveRecord::Relation,您可以在其中链接更多查询。

我也在使用 #scoped ,它将返回匿名作用域,这将允许您链接查询。

最后,取决于您。我只是给你选择。

关于ruby-on-rails-3 - 如何使Rails 3动态范围成为条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5748550/

相关文章:

ruby-on-rails - 对象.attribute_changed?无法在 Rails Controller 中工作

ruby-on-rails - 如何设置回形针样式仅在内容类型为图像时才起作用?

ruby-on-rails-3 - Rails.cache.fetch 插入额外的值

ruby-on-rails - 无法在 Heroku 上创建表——迁移在本地工作但在 Heroku 上失败

ruby - 如何重构构建事件记录搜索哈希的 Controller 操作

ruby-on-rails - 如果 child 的回形针为零,我如何返回 parent 的附件

ruby-on-rails - 推送到heroku-rails 3后 Assets 管道中断?

ruby-on-rails-3 - Capybara/RSpec 更好的日志记录?

javascript - 如何动态删除这些元素?

ruby-on-rails-3 - 使用 dateAxisRenderer 行的 jqplot 不呈现,任何想法为什么?