2017-05-07 5 views
0

どのようにしてこの種類のSQLをアクティブレコード構文に変換しますか? 私は主にINを他の要素と解決するのに苦労しました。SQLをアクティブレコードに変換するクエリの照合は

SELECT \"accounts\".* FROM account_categories, accounts WHERE \"accounts\".\"worksheet_id\" = 5 AND (account_categories.name IN ('Savings','Deposit') AND account_categories.id = accounts.account_category_id) ORDER BY \"accounts\".\"id\" ASC"

worksheet_idはいつも私が勘定モデルのスコープでこれを使用したい5.

ではありません、異なります。このコードを試してみてください

scope :savings_and_deposit, -> { from('account_categories, accounts').where("account_categories.name = ? AND account_categories.id = zen_accounts.account_category_id", ['Savings','Deposit]) }

+0

最後の例では、両方の名前を問合せても機能しません。どのエラーが表示されますか?そしてあなたは '[Savings '、' Deposit]'を引用していませんでした。 –

+0

@Evolve:(?)で 'account_categories.name 'を使わないのはなぜですか? –

答えて

1

scope :savings, -> (worksheet_id) { filtered_categories(worksheet_id, ['Savings']) } 
scope :savings_and_deposit, -> (worksheet_id) { filtered_categories(worksheet_id, ['Savings', 'Deposit']) } 

scope :filtered_categories, -> (worksheet_id, category_names) do 
    joins(:account_categories). 
    where(worksheet_id: worksheet_id). 
    where(account_categories: {name: category_names}). 
    order(id: :asc) 
end 

このコードは何Accountモデルを想定し、この

scope :savings, -> { from('account_categories, accounts').where("account_categories.name = ? AND account_categories.id = zen_accounts.account_category_id", 'Savings') }

が、貯蓄&預金の両方のために、このような何かをテストするような類似 すでにrelatiを持っているon account_categories、それ以外の場合はjoins(:account_categories)と置き換えます。joins("JOIN account_categories ON account_categories.id = accounts.account_category_id")

関連する問題