1

所以我有一个Entry模型,其中有一列名为created_by,我想默认为第一个User创建条目的人。我安装了审核,在我的Entry模型中我有:

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.save的方法后设置值吗?create不太确定在这里采取什么最实用的方法。

谢谢,

迈克尔。

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.associated因为这些审核应该与相同的current_user. 如果不是这样,你手上的问题就更大了。

于 2013-08-28T20:16:16.013 回答