ルビー2とレール4
このコードのチャンクを考えてみましょう:
Post.where{
(created_by == user) &
(
(group_id.in [1,2,3,4]) | (event_id.in [5,6,7,8])
)
}
これはそれ自体でうまく機能します。
私がやりたいことは(group_id.in [1,2,3,4]) | (event_id.in [5,6,7,8])
、これをローカル変数、メソッド、ブロックなどから取得することです。
多くのクエリがあり、このコードを 1 つの場所に含めたいと考えています。
ブロックをyield、Proc、lambasで使用するなど、いくつかのことを試しました。私は行き詰まり続けているようです:NameError (undefined local variable or method 'group_id')
注:ブロックに使用する独自のDSLを含むsqueelを使用instance_eval
しています。経由でアクセスできるので、これで問題ありませんmy{<method_name_here>}
。
これが私が試したことです:
viewable_areas = lambda { (group_id.in [1,2,3,4]) | (event_id.in [5,6,7,8]) }
Post.where{
(created_by == user) &
(
my{viewable_areas.call}
)
}
私が得ることができる最高のものは次のとおりです。NameError (undefined local variable or method 'group_id')
これを処理する方法があるに違いないことはわかっていますが、今は思い浮かびません。
また、私が扱っている実際のコードは、ここで説明しているものよりもはるかに複雑ですが、この例では簡略化しています。