2012-04-30 11 views
0

私はユーザテーブルと従業員テーブルを持っています。彼らは1対1の関係を持っています。 タイムエントリレコードを作成すると、私は現在の従業員を自動的に割り当てたいと思います。 私がアクセスできるのは、current_userです。 employeeテーブルには外部キー(user_id)があります。RoRは、従業員 - ユーザの正しいコーディングが必要です

私は形でこれを試してみました - しかし、それは動作しませんでした:

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

私はユーザテーブル= EMPLOYEE_IDに外部キーを追加する必要がありますか?

おかげ

+0

いいえ、あなたはusersテーブルにemployee_idは必要ありません。あなたはどんなエラーを出していますか?タイムレコードと従業員の関係を適切に設定しましたか? – tmaximini

+0

これはこの質問にはまったく関係ありませんが、従業員表を使用する理由は何ですか?それはちょうど1対1の関係なので、私は本当に 'current_user.employee'を得るために余分なクエリを追加することの利点は見ません。ユーザーテーブルに従業員の属性を持たないようにするものがありますか? – nzifnab

答えて

0

だからあなたの従業員のモデル

belongs_to :user 

とユーザーモデル

has_one :employee 

は、右か?

もしそうなら、それは

current_user.employee.id 

(というよりもcurrent_user.employee.employee_id)に隠しフィールドの値を変更するのと同じくらい簡単かもしれません。

これでうまくいかない場合は、1対1の関係を構築する方法を正確に投稿できますか?

+0

これはうまくいった - ありがとう – Reddirt

0

コントローラにemployee_idを設定するのが最善の策かもしれません。隠しフィールドの値は、その後自動的に取り込まれるべき

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

@entryはあなたがフォームを構築していること( Entryそれを呼び出す)モデルのインスタンスである場合には、このような何かを行うことを検討
<%= 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を確認する必要があります。これは行く方法かもしれません。

関連する問題