在我的一个 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_column
和 order_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_column
和 current_user.order_direction
,您必须确保用户只能将这些列与有效数据一起输入数据库。否则,用户将能够制作不需要的 SQL 查询。
关于ruby-on-rails - 如何使 Rails 模型中的 default_scope 动态化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20379179/