小编rel*_*eod的帖子

default_scope和association

假设我有一个Post模型和一个Comment模型.使用常见模式,Post has_many Comments.

如果Comment设置了default_scope:

default_scope where("deleted_at IS NULL")
Run Code Online (Sandbox Code Playgroud)

无论范围如何,如何轻松检索帖子上的所有评论?这会产生无效结果:

Post.first.comments.unscoped
Run Code Online (Sandbox Code Playgroud)

这会生成以下查询:

SELECT * FROM posts LIMIT 1;
SELECT * FROM comments;
Run Code Online (Sandbox Code Playgroud)

代替:

SELECT * FROM posts LIMIT 1;
SELECT * FROM comments WHERE post_id = 1;
Run Code Online (Sandbox Code Playgroud)

运行:

Post.first.comments
Run Code Online (Sandbox Code Playgroud)

生产:

SELECT * FROM posts LIMIT 1;
SELECT * FROM comments WHERE deleted_at IS NULL AND post_id = 1;
Run Code Online (Sandbox Code Playgroud)

我理解uncoped删除所有现有范围的基本原则,但是它不应该知道并保持关联范围吗?

拉取所有评论的最佳方式是什么?

ruby-on-rails default-scope

25
推荐指数
5
解决办法
8537
查看次数

Rails3通过问题嵌套has_many

我们计划将我们的应用程序升级到Rails3.我们使用过的一个插件是nested_has_many_through.这个插件似乎过时了,不再维护,并且似乎没有在新的Rails3应用程序中工作.

一个简单的例子:

Author.rb
has_many :posts
has_many :categories, :through => :posts, :uniq => true
has_many :related_posts, :through => :categories

Post.rb
belongs_to :author
belongs_to :category

Category.rb
has_many :posts
Run Code Online (Sandbox Code Playgroud)

任何人都可以推荐最好的练习方式来处理这个,或者一个工作的Rails3插件?

谢谢!!

has-many-through ruby-on-rails-3

9
推荐指数
1
解决办法
3993
查看次数

default_scope在某些情况下会中断(更新|删除|销毁)_all

我相信这是Rails 3中的一个错误.我希望有人能指引我朝着正确的方向前进.下面发布的代码纯粹是为了说明这个问题.希望这不会混淆问题.

鉴于我有一个Post模型和一个Comment模型.发表has_many评论,评论发表于发帖.

在Post模型上设置default_scope,定义join()和where()关系.在这种情况下,()依赖于连接().

通常帖子不依赖于评论.再说一遍,我只想举一个简单的例子.当where()依赖于join()时,这可能是任何情况.

class Post < ActiveRecord::Base
  has_many :comments, :dependent => :destroy

  default_scope joins(:comments).where("comments.id < 999")
end

class Comment < ActiveRecord::Base
  belongs_to :post, :counter_cache => true
end
Run Code Online (Sandbox Code Playgroud)

运行以下命令:

Post.update_all(:title => Time.now)
Run Code Online (Sandbox Code Playgroud)

生成以下查询,并最终抛出ActiveRecord :: StatementInvalid:

UPDATE `posts` SET `title` = '2010-10-15 15:59:27'  WHERE (comments.id < 999)
Run Code Online (Sandbox Code Playgroud)

同样,update_all,delete_all,destroy_all的行为方式相同.当我的应用程序在尝试更新counter_cache时抱怨时,我发现了这种行为.最终深入研究update_all.

ruby-on-rails default-scope destroy

9
推荐指数
2
解决办法
1795
查看次数

Rails,CookieStore与ActiveRecordStore

我目前正在遇到一个奇怪的问题,我们的用户正在退出.我无法明确地重现它.

Rails应用程序使用默认的CookieStore.

我最初的假设是,某种程度上 cookie中的会话数据,甚至cookie本身都被破坏了.这可能来自用户清除浏览器数据,也可能是系统中尚未捕获的内容.

截至目前,身份验证系统似乎正在按预期运行(Authlogic),我们在应用程序的其他组件中没有遇到广泛的问题.

我正在考虑使用ActiveRecordStore来查看问题是否已解决.我的理解是会话数据将存储在数据库中,如果删除了cookie,用户将无法注销.

使用CookieStore和ActiveRecordStore有很多已知的优点/缺点吗?

为什么在创建Rails应用程序时,CookieStore是默认值,而不是ActiveRecordStore?

activerecord store ruby-on-rails cookiestore

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