Така че имам 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