小编Mis*_*ker的帖子

使用块/ proc/lambda进行Ruby双管分配?

能够写出来真的很好

@foo ||= "bar_default"
Run Code Online (Sandbox Code Playgroud)

要么

@foo ||= myobject.bar(args)
Run Code Online (Sandbox Code Playgroud)

但我一直在寻找是否有办法写出类似的东西

@foo ||= do
  myobject.attr = new_val
  myobject.other_attr = other_new_val
  myobject.bar(args)
end
Run Code Online (Sandbox Code Playgroud)

在实际的功能代码中大致相当于类似的东西

@foo = if !@foo.nil?
         @foo
       else
         myobject.attr = new_val
         myobject.other_attr = other_new_val
         myobject.bar(args)
       end
Run Code Online (Sandbox Code Playgroud)

我想我可以编写自己的全局方法,如"getblock"来包装并返回任何常规块的结果,但我想知道是否已经有一种内置的方法来执行此操作.

ruby syntax block operators variable-assignment

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

Rails acts_as_paranoid和has_many:through

所以我使用的是rails3_acts_as_paranoid gem,并且在使用has_many控制范围时出现了一些问题:通过关联.

例如

# User.rb
acts_as_paranoid
has_many :folders
has_many :files, :through => :folders
Run Code Online (Sandbox Code Playgroud)

-

# Folder.rb
acts_as_paranoid
belongs_to :user
has_many :files, :dependent => :destroy
Run Code Online (Sandbox Code Playgroud)

-

# File.rb
acts_as_paranoid
belongs_to :files
Run Code Online (Sandbox Code Playgroud)

现在让我们在users_controller.rb的某个地方说,我想查询属于用户的所有文件,是否已删除,和/或属于已删除的文件夹.所以我自然会假设做类似以下的事情

current_user.files.with_deleted
Run Code Online (Sandbox Code Playgroud)

with_deleted 方法做它的工作去除 files.deleted_at IS NULL

...但是......它没有删除default_Scope用于幕后使用的文件夹.所以我们仍然有一个folders.deleted_at IS NULL条件,阻止我检索属于那些deleted_at不为null的文件夹的文件.

我想继续使用acts_as_paranoid,因为它在我的应用程序的所有其他位置非常有用,并且我试图不做像手动过滤和弹出.where_values数组元素之类的东西.但我对处理复杂范围或可用的方法知之甚少.

ruby scope associations ruby-on-rails-3 acts-as-paranoid

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