所以我有一个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。
答案 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
相关联。如果情况并非如此,那么您手上的问题会更严重。