0

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

フォームでこれを試しましたが、うまくいきませんでした:

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

user テーブル = employee_id に外部キーを追加する必要がありますか?

ありがとう

4

2 に答える 2

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 をチェックする必要があるので、これが良い方法かもしれません。

于 2012-04-30T22:43:16.443 に答える
0

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

belongs_to :user

そしてあなたのユーザーモデル

has_one :employee

そうですか?

もしそうなら、隠しフィールドの値を

current_user.employee.id

(current_user.employee.employee_id ではなく)。

それがうまくいかない場合は、1 対 1 の関係をどのように構築しているかを正確に投稿できますか?

于 2012-04-30T22:15:28.593 に答える