Ruby on rails 4 左外部联接不会产生预期的结果

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 =>

假设我有下面描述的3个模型:

上面的查询转换为以下SQL:

我已尝试将
.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>