相关疑难解决方法(0)

为什么使用rails default_scope经常推荐使用?

互联网上的 每个地方人们都提到使用rails default_scope是一个坏主意,而default_scopestackoverflow 的最高命中是关于如何覆盖它.这感觉很混乱,值得一个明确的问题(我认为).

所以:为什么使用rails default_scope这么坏主意?

ruby-on-rails default-scope

120
推荐指数
3
解决办法
3万
查看次数

Rails:为什么with_exclusive_scope受到保护?关于如何使用它的任何好的做法?

给定一个带有default_scope的模型来过滤所有过时的条目:

# == Schema Information
#
#  id          :integer(4)      not null, primary key
#  user_id     :integer(4)      not null, primary key
#  end_date    :datetime        

class Ticket < ActiveRecord::Base
  belongs_to :user
  default_scope :conditions => "tickets.end_date > NOW()"
end
Run Code Online (Sandbox Code Playgroud)

现在我想得到任何票.在这种情况下,with_exclusive_scope是要走的路,但这种方法是否受到保护?只有这个有效:

 Ticket.send(:with_exclusive_scope) { find(:all) }
Run Code Online (Sandbox Code Playgroud)

有点黑客,不是吗?那么正确的使用方法是什么?特别是在处理协会时,情况变得更糟(假设用户有很多票):

 Ticket.send(:with_exclusive_scope) { user.tickets.find(:all) }
Run Code Online (Sandbox Code Playgroud)

这是如此丑陋! - 不能成为轨道!?

scope ruby-on-rails

47
推荐指数
3
解决办法
3万
查看次数

如何绕过default_scope?

我有一个具有以下default_scope的用户模型:

default_scope where(account_id: Account.current_account.id)

如果我打电话,User.all我总是根据当前帐户获得结果.

在某些情况下,出于管理目的,我想绕过该范围并查看系统中的所有用户,无论帐户如何.

有没有办法做到这一点?

ruby-on-rails

14
推荐指数
1
解决办法
5111
查看次数

如何使用Ruby on Rails简化软删除过程?

我想要一个模型,我需要软删除一条记录,而不是在搜索时显示它们或任何其他条件.

我想保留模型而不删除记录.怎么去这个?

ruby ruby-on-rails ruby-on-rails-3

13
推荐指数
4
解决办法
2万
查看次数

Rails 3默认范围,范围与覆盖

我有一种情况,现有应用程序的行为正在发生变化,这让我头疼.

我的应用有照片.照片有一个状态:"batch", "queue", or "complete".应用中的所有现有照片都是"完整的".

99%的时间我只需要显示完整的照片,而在所有现有的代码库中,我需要每次调用照片仅限于完整的照片.

但是,在与上传和分类照片相关的屏幕中,我需要能够相当轻松地覆盖默认范围以显示批量或排队的照片.

像许多其他人一样,我需要找到一种在某些情况下轻松覆盖默认范围的方法.我看着这些问题(1,2),他们似乎并没有回答我要找的.

我希望的代码是这样的:

class Photo < ActiveRecord::Base
  ...
  default_scope where(:status=>'complete')
  scope :batch, unscoped.where(:status=>'batch')
  scope :queue, unscoped.where(:status=>'queue')
  ...
end
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用.我尝试在lambdas中包装范围方法,但这也不起作用.

我知道default_scope带有行李,但是如果我不能使用覆盖,那么我正在寻找添加scope :complete ...并且必须梳理我现有应用程序中每次调用照片并添加.complete以过滤未处理的照片.

你会如何解决这个问题?

activerecord named-scope ruby-on-rails default-scope ruby-on-rails-3

7
推荐指数
1
解决办法
1万
查看次数