Я пытаюсь добавить функциональность в проект, выполненный в ruby, я не знаком с Ruby, но мне удалось создать страницу обзора проекта, которая позволяет обновлять коды задач проекта для данного ежемесячного обзора.
Моя проблема в том, что клиент (мой брат) попросил меня разрешить ему редактировать запланированные часы на следующие несколько месяцев в обзоре проекта в этом месяце.
Мне удалось показать те значения, которые не принадлежат дочернему элементу на странице, и я могу заставить обновляться обычные дочерние элементы, но я не могу получить обновление для значения, которое я заимствую с будущего месяца (ей).
Чтобы страница отображалась без сбоев при обновлении, я добавил это attr_accessor
(в противном случае произошли сбои при обновлении, поскольку в модели не существовало значение.
выдержка из моего кода показана ниже. Нет ошибок, но также нет обновлений для переменной, отраженной в attr_accessor
, я пробовал тестировать с изменениями обычных элементов в дочернем объекте, они будут обновлены, но по-прежнему нет вызова attr_accessor
"сеттер".
предложения?
Большое спасибо,
Camille ..
class Projectreview < ActiveRecord::Base
has_many :reviewcostelements
accepts_nested_attributes_for :reviewcostelements
end
class ProjectreviewsController < ApplicationController
def update
@projectreview = Projectreview.find(params[:id])
respond_to do |format|
if @projectreview.update_attributes(params[:projectreview])
format.html { redirect_to(@projectreview) }
end
end
end
end
class Reviewcostelement < ActiveRecord::Base
belongs_to :projectreview
attr_accessor :monthahead_hours1
def monthahead_hours1(newvalue) #this is the setter
#why do I never see this log message ??
logger.info('SETTER 1')
set_monthahead_hours(1, newvalue)
end
def monthahead_hours1 #this is the getter
get_monthahead_hours(1)
end
def update_attributes(attributes)
#never gets called!!!
logger.info('update_attributes values rce')
super(attributes)
end
def get_monthahead_hours(p_monthsahead)
#this works and returns the next month's scheduled_hours_this_month value
rce = Reviewcostelement.first(:joins => :projectreview,
:conditions => ["projectreviews.project_id = ?
and reviewcostelements.projecttaskcode_id =?
and projectreviews.month_start_at = ?", projectreview.project_id ,
projecttaskcode_id ,
projectreview.month_start_at.months_since(p_monthsahead)])
if rce
return rce.scheduled_hours_this_month
else
return 0
end
end
def set_monthahead_hours(p_monthsahead, newvalue)
#this never seems to get called
logger.info("set the month ahead hours")
rce = Reviewcostelement.first(:joins => :projectreview,
:conditions => ["projectreviews.project_id = ?
and reviewcostelements.projecttaskcode_id =?
and projectreviews.month_start_at = ?",
projectreview.project_id ,
projecttaskcode_id ,
projectreview.month_start_at.months_since(p_monthsahead)])
if rce
rce.scheduled_hours_this_month = newvalue
rce.save
end
end
end