Subscribed unsubscribe Subscribe Subscribe

Railsで同じwhere句のチェインヘ(^o^)ノ

チェインかチェーンかはさておき

Railsではメソッドチェインは普通に使いますよね?

scopeのチェインもよく使います

こんな感じ

Post.user_by(@current_user).search_tag_by('Ruby')

では、動的に利用したいscopeを利用したい場合は?

scopeではないですが、2つのキーをセットで複数条件に指定したい場合とか

where(tag_type: 'programming', tag_name: 'Ruby').where..

tag_typeとtag_nameをセットで複数検索したい!

where(tag_type: 'programming', tag_name: ['Ruby', 'Rails'])

これだと期待するのと違うはず(間違えていたら教えてくだされー

SQLが間違ってたので修正 (2014/10/30)

SQLだとこんな感じ

where(tag_type = 'programming' and tag_name in ('Ruby', 'Rails'))

期待するのはコレ

where(tag_type = 'programming' and tag_name = 'Ruby') and (tag_type = 'programming' and tag_name = 'Rails')
追記 (2014/10/30)

上記クエリーは同じですね....or句やscopeのチェインには使えます

そこはinjectメソッドヘ(^o^)ノ

こんな感じで書ける

['Ruby', 'Rails'].inject(Post.all) do |posts, p|
  posts.where(tag_type: 'programming', tag_name: p)
end
Post.where(tag_type: 'programming', tag_name: 'Ruby').
  where(tag_type: 'programming', tag_name: 'Rails')

と同等

こんなことしなくてもありそうだが...( ̄▽ ̄;)

Happy Hacking٩( ‘ω’ )و