Итак, у меня есть модель 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
контроллера? Не совсем уверен, какой подход здесь наиболее практичный.
Спасибо,
Майкл.
created_by
, если не в момент создания@entry
. Я предположил, что могу обернуть материалhidden_field
if @entry.audits
, и в этом случае я мог бы, предполагая, что запись уже была создана, установить значениеcreated_by
к тому, что я хочу, чтобы это было. - person Thalatta   schedule 29.08.2013created_by
в форме, устанавливайте его из контроллера перед@entry.save
. Нет необходимости сохранять запись, чтобы получить пользователя, вы должны знать, кто этот пользователь черезcurrent_user
. Вы можете добавить проверки обратного вызова, чтобы убедиться, что это так. - person Damien Roche   schedule 29.08.2013