审计:未定义的方法`关联'为nil:NilClass

时间:2013-08-28 19:59:05

标签: ruby-on-rails forms acts-as-audited

所以我有一个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的值吗?不确定这里最实用的方法是什么。

谢谢,

Micha'el。

1 个答案:

答案 0 :(得分: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相关联。如果情况并非如此,那么您手上的问题会更严重。