Ruby on rails 4 左外部联接不会产生预期的结果
假设我有下面描述的3个模型: 上面的查询转换为以下SQL: 我已尝试将Ruby on rails 4 左外部联接不会产生预期的结果,ruby-on-rails-4,left-join,Ruby On Rails 4,Left Join,假设我有下面描述的3个模型: 上面的查询转换为以下SQL: 我已尝试将.where(:user\u id==@user.id)添加到查询的末尾,但结果相同 我做错了什么?我找到了一个解决办法 我正在提取数据并手动构建一个数组以传递到视图: def show @subs =[] Newsletter.all.each do |nl| @subs << {:newsletter => nl, :subscription =>
.where(:user\u id==@user.id)
添加到查询的末尾,但结果相同
我做错了什么?我找到了一个解决办法 我正在提取数据并手动构建一个数组以传递到视图:
def show
@subs =[]
Newsletter.all.each do |nl|
@subs << {:newsletter => nl, :subscription =>
@user.subscriptions.to_a.detect{|s| s.newsletter_id==nl.id}}
end
end
def显示
@subs=[]
时事通讯.all.each do | nl|
@subs nl,:订阅=>
@user.subscriptions.to_a.detect{u id==nl.id}
结束
结束
然后在视图中,我迭代该数组并访问模型:
<ul>
<% @subs.each do |s| %>
<li>
<%= s[:newsletter].title %> - (
<%= if s[:subscription]
s[:subscription].format
else
'NONE'
end %> )
</li>
<% end %>
</ul>
-
- (
)
如果有人有更好的解决方案,我很乐意知道
def show
@subs = Newsletter.joins("LEFT OUTER JOIN subscriptions ON
subscriptions.newsletter_id = newsletters.id and
subscriptions.user_id = #{@user.id}").includes(:subscriptions)
end
Newsletter Load (0.3ms)
SELECT "newsletters".* FROM "newsletters"
LEFT OUTER JOIN subscriptions
ON subscriptions.newsletter_id = newsletters.id and subscriptions.user_id = 1
Subscription Load (0.2ms)
SELECT "subscriptions".* FROM "subscriptions"
WHERE "subscriptions"."newsletter_id" IN (1, 2, 3)
def show
@subs =[]
Newsletter.all.each do |nl|
@subs << {:newsletter => nl, :subscription =>
@user.subscriptions.to_a.detect{|s| s.newsletter_id==nl.id}}
end
end
<ul>
<% @subs.each do |s| %>
<li>
<%= s[:newsletter].title %> - (
<%= if s[:subscription]
s[:subscription].format
else
'NONE'
end %> )
</li>
<% end %>
</ul>