2015-04-29 36 views
0

我再一次將我的頭撞在ActiveRecord :: Relation上。這是我想要做的:ActiveRecord與散列輸出的關係

current_user.jobs.includes(:employee).map {|c| { name: "#{c.employee.name}, hire_date: c.employee.hire_date.strftime("%Y-%m-%d") } } 

所以,我有一個current_user有很多工作。我想要返回包含員工的所有人。基於這個ActiveRecord關係,我想根據這個關係獲取工人的姓名和僱傭日期。但是,當我這樣做時,我得到了可怕的錯誤:

NoMethodError - 未定義的方法名稱爲nil:NilClass。

我也嘗試將ActiveRecord關係轉換爲數組,哈希和json。所有這些在嘗試獲取名稱時都返回了相同的錯誤。

所有我試圖做的是採取的收集:

current_user.jobs.includes(:員工),並遍歷該關係,創建基於返回的數據散列的數組。

任何想法或推動正確的方向嗎?

感謝

回答

1

嘗試使用.employee方法而不是.worker - 因爲你是包括employee模型。

0

我不知道爲什麼你includes:employee但參考:worker,但在任何情況下,表達current_user.jobs是給你在工作的迭代器,所以我會打電話給每個元素j。沒什麼大不了。不知道爲什麼你有那種插值,這是不需要的。

這應該工作...

city_date_hash = current_user.jobs.includes(:employee).map {|j| { city: j.employee.name, hire_date: j.employee.hire_date.strftime("%Y-%m-%d") } } 

而且,我不知道爲什麼employee.name正在關鍵:city ......我可能已經使用:name:employee_name

+0

史蒂夫,你是正確的,我在編輯/處理代碼之間,並在我的問題中輸入錯誤的代碼。我編輯了我的問題。我其實有類似於你放在那裏的東西,它不起作用。它會引發「NoMethodError - 未定義的方法名稱」爲nil:NilClass「錯誤,正如我所提到的。看到我更新的問題,我有什麼。 –

+0

我只是想通了。當我迭代集合時,我有一個零對象。所以你有什麼工作,直到我碰到我正在返回的零對象。 –