2016-08-30 65 views
1

我試圖將下面的Rails where子句轉換爲使用Arel,主要是利用Arel提供的or方法。Rails Arel加入連接表的條件

Post模型

class Post 
    belongs_to :user 
end 

用戶模型

class User 
    has_many :posts 
end 

我找發貼者的帖子。

這是Rails查詢:

Post.joins(:user).where(users: { first_name: 'Mark' }) 

我需要將此查詢轉換與阿雷爾。

在此先感謝!

回答

4

這應該這樣做。

# Generate Arel tables for both 
posts = Arel::Table.new(:posts) 
users = Arel::Table.new(:users) 

# Make a join and add a where clause 
posts.join(:users).on(posts[:user_id].eq(users[:id])).where(users[:first_name].eq('Mark')) 
+0

你確信這將有助於?我得到這個錯誤:未定義的方法'連接'爲#

+0

@AfsaneFadaei更正,沒有這樣的方法作爲'連接',取代它'加入' – dskecse

+0

謝謝。我已經批准編輯回答:) – kiddorails

0

如果你只需要阿雷爾的地方部分(不是爲加入),我認爲這將是一個更好的解決方案(將執掌ActiveRecord的結果):

Post.joins(:user).where(User.arel_table[:first_name].eq('Mark')) 
+0

那麼爲什麼不是'Post.joins(:user).where('users.first_name =?','Mark')'更好? ActiveRecord一路 – kiddorails

+0

@kiddorails因爲這樣你可以使用'.or'和Arel提供的其他方法,同時仍然可以很容易地處理Activerecord結果 – user3033467

+0

我知道這些都是ARE的好處,但它在這個特定的查詢中沒有用例。 – kiddorails