如何在Ruby On Rails中使用内部联接

时间:2012-10-03 05:43:40

标签: ruby-on-rails ruby-on-rails-3

我正在铁轨上工作。

我的需要是,

@accountUrl = Account.find_by_id(current_account_id)

@details = Detail.find_by_acc_id(@accountUrl.id)

如何从上面的例子中编写内连接查询

任何人都可以。

3 个答案:

答案 0 :(得分:16)

在这个简单的例子中,Rails不使用连接,它加入“in code”:

Account.includes(:details).where(:id => current_account_id).first

它将进行两次单独的查询。

如果您需要选择条件,则必须“手动”(或通过范围)加入

Account.joins(:details).where("details.name" => selected_detail).first

这将进行INNER JOIN并仅返回满足条件的帐户。

答案 1 :(得分:3)

model A
  has_many :bs

model B
  has_many :cs
在模型A中,你可以写

has_many :cs, :through => :bs #uses inner join to fetch the records.

结帐http://guides.rubyonrails.org/active_record_querying.htmlhttp://asciicasts.com/episodes/215-advanced-queries-in-rails-3

答案 2 :(得分:0)

INNER JOIN在Rails中是默认设置 Rails doc

中的示例
User.joins(:posts)
=> SELECT "users".* FROM "users" INNER JOIN "posts" ON "posts"."user_id" = "users"."id"

在您的情况下,将是这样的:

Account.joins(:details)
       .where(id: current_account_id)