ruby-on-rails - 如何使 Rails 模型中的 default_scope 动态化?

标签 ruby-on-rails ruby ruby-on-rails-3 activerecord

在我的一个 Rails 模型中,我有这个:

class Project < ActiveRecord::Base

  belongs_to :user

  default_scope order("number ASC")

end

现在的问题是我希望每个 user 能够单独设置他或她的 default_scope。例如,用户 A 可能需要 default_scope order("date ASC"),而另一个用户可能需要 default_scope order("number DESC")

在我的 User 表中,我什至有列来存储这些值:order_columnorder_direction

但是我怎样才能使模型中的 default_scope 动态化呢?

感谢您的帮助。

最佳答案

正如@screenmutt 所说,默认范围不是数据驱动的,而是模型驱动的。由于此范围将根据每个用户的数据发生变化,因此我将为此使用常规范围。

@fmendez 回答很好,但它使用默认范围,我刚刚解释了为什么不建议使用此方法。

在你的情况下我会这样做:

class Post < ActiveRecord::Base
  scope :user_order, lambda { order("#{current_user.order_column} #{current_user.order_direction}")}
end

这里还有一件非常重要的事情要注意,SQL 注入(inject):因为您在查询中嵌入了 current_user.order_columncurrent_user.order_direction ,您必须确保用户只能将这些列与有效数据一起输入数据库。否则,用户将能够制作不需要的 SQL 查询。

关于ruby-on-rails - 如何使 Rails 模型中的 default_scope 动态化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20379179/

相关文章:

ruby-on-rails - 从对象数组中获取关联数组?

ruby-on-rails - 从两个数据源创建哈希的最优雅方式

ruby-on-rails - i18n用于选择框

ruby-on-rails - 如何使用邮箱访问已发送消息页面上的收件人

ruby-on-rails - rails : How to ensure clean state for test database?

ruby-on-rails - 带有 has_many_through 表的 NameError

ruby-on-rails - 如何在 rails (postgres) 查询中参数化日期范围?

ruby - Heroku 和 Datamapper 问题

ruby - 如何强制 Qt 小部件保持相等的高度和宽度?

javascript - 复杂形式 - 如何为每个新元素生成新的 object_ids?