1

したがって、エントリを作成した最初の人にデフォルト設定したいEntryという列を持つモデルがあります。監査済みをインストールしましたが、モデルには次のものがあります。created_byUserEntry

belongs_to :user
audited :associated_with => :user

同様に、私のUserモデルには次のステートメントがあります。

has_many :entries     
has_associated_audits

私のエントリーフォームで、エントリーの最初の監査の関連ユーザーと等しくなるようhidden_fieldに設定しようとしていたを作成しようとしていました。created_byただし、フォーム ビューを読み込もうとすると、次のエラーが発生します。

undefined method `associated' for nil:NilClass

ビュー内のコードは次のとおりです。

 .field
   = f.label :created_by
 %br
   = f.hidden_field :created_by, value: @entry.audits.first.associated

ビューでentries_controller設定したコードは次のとおりです。@entry

  def new
    @entry = Entry.new
    authorize! :create, @entry

    @project = Project.find(params[:project_id])
    @entry.project_id = @project.id
    authorize! :update, :read, @project
  end

直観的には、まだ保存されていないため、新しい監査を作成する場合に @entry.audits を呼び出すのはあまり意味がありません。コントローラーのメソッドで@entry.created_by呼び出した後に値を設定する必要がありますか? ここで取るべき最も実用的なアプローチが何であるかについてはよくわかりません。@entry.savecreate

ありがとう、

マイケル。

4

1 に答える 1

2

私がすることはcreated_by、フォームから隠しフィールドを削除し(簡単に傍受される)、代わりに(または代替手段entryを使用して)保存する前にコントローラー内から設定しcurrent_userて、エントリを作成するユーザーにアクセスすることです。

def create_entry
  @entry.created_by = current_user
  @entry.save
end

これらの監査は同じに関連付ける必要があるためcreated_by、監査が保存された後にユーザーを割り当てることは重要ではないと思います。そうでない場合は、より大きな問題が発生します。@entry.audits.first.associatedcurrent_user

于 2013-08-28T20:16:16.013 に答える