Средство установки Ruby attr_accessor не вызывается во время update_attributes для дочернего объекта - PullRequest
0 голосов
/ 01 июля 2010

Я пытаюсь добавить функциональность в проект, выполненный в 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

1 Ответ

2 голосов
/ 01 июля 2010

Сеттер метода доступа выглядит так:

def monthahead_hours1=(newvalue)
  ...
end

Обратите внимание на символ равенства (=).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...