ruby-on-rails-3 - 如何获取rails 3中所有数据库行的范围?

标签 ruby-on-rails-3 activerecord scope

假设我们有以下设置:

class Post < ActiveRecord::Base
  belongs_to :user
end

class User < ActiveRecord::Base
  has_many :posts
end

进一步假设用户有一个 bool 属性“admin”,这表明他是否是全局管理员。

我想为 User 类编写一个方法(或范围?),称为“visible_posts”。如果用户不是管理员,它应该只返回自己的帖子。如果他是管理员,则该方法应返回系统中的所有帖子。

我的第一次尝试是这样的:

class User < ActiveRecord::Base

  [...]

  def visible_posts
    if admin?
      Post.all
    else 
      posts
    end
  end

end

这里的问题是 Post.all 返回一个数组,但我更希望有一个 ActiveRecord::Relation,就像我从帖子中获得的那样,以便以后使用它。

是否有可能获得代表所有帖子的 ActiveRecord::Relation ?

最佳答案

我猜你可以在 Rails 中做 Post.scoped

稍后您可以调用 .all 来获取结果

关于ruby-on-rails-3 - 如何获取rails 3中所有数据库行的范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7333198/

相关文章:

ruby-on-rails - 根据 rails 3 中的范围计算版税

ruby-on-rails - 如何在删除方法Rails中调用某个路径

ruby-on-rails - Rails/Active Record FAILSAFE 错误 "User can' t 被引用”

javascript - 如何将变量传递给 .post()?

ruby-on-rails - Rails 单选按钮 - 模型中多列的一种选择

ruby-on-rails - 如何在 rspec 集成测试中访问 rails 请求对象?

PHP try catch : get variable defined in try

Python 在另一个函数中调用一个函数

json - Backbone 对表单提交没有约束力

ruby-on-rails - Rails 如何本地化表单对象的属性