2016-03-01 48 views
1

我只想了解rails示波器。任何好的解釋都會有幫助。Rails示波器不能顯示正確的信息 - Rails 4

  • 我想只顯示誰擁有有就業
  • 我使用的範圍,試圖顯示此簡歷用戶:

    scope :resumes_with_employments, -> { 
        where("id in (select resume_id from employments)") 
    } 
    
  • 我有2個用戶。他們都有工作簡歷,但只有一個用戶正在展示。

車型

user.rb 
has_one :resume 

resume.rb 
belongs_to :user 
has_many :employments 

employment.rb 
belongs_to :resume 

模式

create_table "users", force: true do |t| 
    t.string "email", 
    t.string "firstname" 
    t.string "lastname" 
    t.string "city" 
end 

create_table "resumes", force: true do |t| 
    t.string "address" 
    t.string "postcode" 
    t.text  "summary" 
    t.integer "user_id" 
end 

create_table "employments", force: true do |t| 
    t.string "companyname" 
    t.date  "datestart" 
    t.date  "dateend" 
    t.integer "resume_id" 
    t.string "employer_name" 
    t.string "employer_tel" 
    t.string "employer_address" 
    t.string "employer_location" 
    t.string "employer_city" 
    t.string "employer_postcode" 
    t.string "employer_email" 
end 

回答

2
scope :resumes_with_employments, -> { 
    where("id in (select resume_id from employments)") 
} 

將範圍查詢,以具有從employmentsresume_id匹配的id用戶。由於resume_id與用戶的id無關,因此該範圍不會返回有用的結果。

我想在這種情況下使用joins,因爲它轉化爲一個INNER JOIN在SQL:

# in models/user.rb 
scope :resumes_with_employments, -> { joins(resume: :employments) } 

嵌套INNER JOIN確保只有用戶是回報有至少有一個就業簡歷。由於簡歷可能有多個就業和INNER JOIN性質,你將需要使用uniq排除這樣的重複:

User.resumes_with_employments.uniq 

或者當你要計算的uniq用戶與範圍:

User.resumes_with_employments.distinct.count(:id) 
+0

謝謝@ spickermann我得到這個錯誤,我不太明白SQLite3 :: SQLException:不明確的列名稱:ID:選擇DISTINCT COUNT(DISTINCT「用戶」。「ID」)從「用戶」INNER JOIN「恢復」ON「恢復」。 「user_id」=「users」。「id」INNER JOIN「employments」ON「employments」。「resume_id」=「resumes」。「id」WHERE(id in(select user_id from resumes))'再次進入它 – ARTLoe

+0

哦,我看到 - 我有這個方法,試圖做一個計數,這是創建錯誤「<%= pluralize(@ users.resumes_with_employments.count,'jobseeker')%>' – ARTLoe

+1

@ARTLoe我更新了我的解決異常的答案。 – spickermann