2012-04-30 23 views
0

我有一個用戶表和一個員工表。他們有一對一的關係。 當我創建時間記錄時,我想自動分配當前員工。 我可以訪問的是current_user。 員工表有一個外鍵(user_id)。RoR需要員工的正確編碼 - 用戶

我的形式嘗試這一點 - 但它沒有工作:

<%= f.hidden_field :employee_id, :value => current_user.employee.employee_id %> 

我需要一個外鍵添加到用戶表= EMPLOYEE_ID?

感謝

+0

不,你不需要用戶表中的employee_id。你遇到了什麼錯誤?您是否正確設置了時間記錄與員工之間的關係? – tmaximini

+0

這與這個問題無關,但是您有什麼理由使用員工表?由於它只是一對一的關係,所以我並不認爲增加額外的查詢只是爲了得到'current_user.employee'。有什麼能夠阻止你在用戶表上擁有員工屬性嗎? – nzifnab

回答

0

所以,你的員工的模型

belongs_to :user 

和您的用戶模型

has_one :employee 

是嗎?

如果是的話,它可能是作爲隱藏字段的值更改爲

current_user.employee.id 

(而不是current_user.employee.employee_id)一樣簡單。

如果這不起作用,您可以準確地發佈您構建一對一關係的方式嗎?

+0

工作 - 謝謝 – Reddirt

0

最好的辦法可能是在控制器中設置employee_id。如果@entry是模型的實例(稱之爲Entry),您正在構建的形式,可考慮做這樣的事情:

# in controller +new+ method: 
@entry.employee_id = current_user.employee.id 

隱藏字段的值然後應該自動地填充:

<%= f.hidden_field :employee_id %> 

當然,你甚至可能根本不需要在表單中設置它。假設表單被髮布到某個地方的create方法,爲什麼不在那裏設置變量?

# in controller +create+ method: 
@entry = Entry.new(params[:entry]) 
@entry.employee_id = current_user.employee.id 

if @entry.save 
    # do stuff 
end 

正如你可能需要至少檢查ID反正,以確保沒有搞笑的業務正在發生,這可能是要走的路。