- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我在 rails 中使用 default_scope 来抽取任何具有 is_deleted = true 值的东西(任何具有这个值的东西都不应该显示,但我仍然想保留数据库中的行)。但是有一个 Controller 操作实际上应该取消删除某些内容(设置 is_deleted = false),但它失败了,因为正在应用 default_scope。据我了解,default_scope 仅在选择/创建记录时应用,但在更新时不应用(来源:http://api.rubyonrails.org/classes/ActiveRecord/Scoping/Default/ClassMethods.html)。
The default_scope is also applied while creating/building a record. It is not applied while updating a record.
我知道我可以使用 .unscoped 方法,但这似乎有悖常理。我误解了文档吗?
app/models/post.rb
class Post < ActiveRecord::Base
default_scope where(:is_deleted => false)
app/controllers/posts_controller.rb
class PostsController < ApplicationController
def undelete
@post = Post.update(params[:id], :is_deleted => false)
render :action => :success if @post.save
end
错误
Couldn't find Post with id=1 [WHERE "posts"."is_deleted" = 'f']
最佳答案
您提到的文档中的行(在创建/构建记录时也应用了 default_scope。在更新记录时不应用它。
)- 表示 default_scope 属性应用于所有模型 build /创造:
在您的情况下,所有新记录都将 is_deleted
属性设置为 false
但是在更新时,如果您从数据库中获取记录,更改一个属性(例如 title
),然后调用 save
- is_deleted
属性不会被强制为 false
,因为它在创建时发生。
但是您使用的 update
方法 ( you can check it here ) 只是在内部使用 find
,它始终使用 default_scope
解决方案就是使用unscoped
方法
class PostsController < ApplicationController
def undelete
@post = Post.unscoped.update(params[:id], :is_deleted => false)
render :action => :success if @post.save
end
关于ruby-on-rails - Rails default_scope 被应用于更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13937754/
我有一个使用 Paranioa gem ( https://github.com/radar/paranoia ) 的模型,用于在数据库中保留已删除的 ActiveRecord 元素。 Paranio
在 ActiveRecord 中有一个 default_scope 类方法来指定默认范围。例如 class User false) end User.all # => SELECT * FROM u
我有一个如下所示的模型设置: class User has_many :items has_many :words, :through => :items end class Item b
我有一个具有以下 default_scope 的用户模型: default_scope where(account_id: Account.current_account.id) 如果我打电话User
假设我有一个 Post 模型和一个 Comment 模型。使用一种常见的模式,发布 has_many 评论。 如果 Comment 设置了 default_scope: default_scope w
Everywhere on the互联网上的人提到使用 Rails default_scope 是一个坏主意,而 stackoverflow 上 default_scope 的热门话题是关于如何覆盖它
嘿。在我的 Controller /索引操作中,我使用以下查询: @course_enrollments = current_user.course_enrollments 这就是我的 table 的
如何在rails控制台中查询时跳过default_scope 例如 class User { where.not(type: 'guest') } end 您还应该小心列名type,除非您将其用于单表
如果我有一个具有默认范围的 ActiveRecord::Base 模型: class Foo ["bar = ?",bar] end 有没有办法在不使用 default_scope 条件的情况下执行
我在访问范围时收到此错误。 这是 AR 模型 class StatisticVariable < ActiveRecord::Base attr_accessible :code, :name
我正在尝试在我的应用中实现 gem devise。在此之前,我的顶级模型是 Album,但现在它是 belongs_to :user(来自设计)。 然后我添加到albums_controller.rb
我在 mysql 下通过了以下测试(使用 FactoryGirl): test "order by title" do @library = create(:drawing_library
在我的模型 (pins.rb) 中,我有两个排序顺序: default_scope order: 'pins.featured DESC' #for adding featured posts to
在执行 ActiveRecord join 时尝试跳过 default_scope 时遇到一些问题。 尽管代码库非常大,但我只是展示基础知识,因为我认为它很好地说明了问题所在: class Clien
我在 rails 中使用 default_scope 来抽取任何具有 is_deleted = true 值的东西(任何具有这个值的东西都不应该显示,但我仍然想保留数据库中的行)。但是有一个 Cont
有什么方法可以在 where 条件下覆盖默认范围或以前的范围吗? (除了重构模型以不使用 default_scope 或使用 unscoped) 另外,为什么会这样?感觉这不是最令人期待或最直观的方法
我的应用程序不仅具有“用户”,而且还具有“管理员”和“ super 管理员”。由于所有这三个共享相同的属性,因此我只想使用一个带有附加属性“role”的表,该属性可以是“user”,“admin”或“
我尝试通过以下方式定义 default_scope: default_scope :joins => :product, :select => "catalog_products.*, product
我在弄清楚这一点时遇到了一些麻烦:我有一个模型 Machine在 locations 上有外键表,我想要 Machine 的默认范围按 location.name 排序.这可能吗? 最佳答案 是的,使
关于 Rails 2/3 的 default_scope 的问题。 在我的 Rails 3 项目中,我使用了很多 default_scope 来通过 created_at desc 进行排序。 所以首
我是一名优秀的程序员,十分优秀!