Railsで同じwhere句のチェインヘ(^o^)ノ
チェインかチェーンかはさておき
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٩( ‘ω’ )و