Ruby on rails 控制器中的命名错误

Ruby on rails 控制器中的命名错误,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,您好,我是Ruby的新手,我正在尝试在我的项目控制器中创建一个方法,如下所示: def update_phase @project = Project.find(params[:id]) diff = (Date.current.year * 12 + Date.current.month) - (@project.starting.year * 12 + @project.starting.month) case when diff >= 30

您好,我是Ruby的新手,我正在尝试在我的项目控制器中创建一个方法,如下所示:

def update_phase
    @project = Project.find(params[:id])
    diff = (Date.current.year * 12 + Date.current.month) - (@project.starting.year * 12 + @project.starting.month)
    case 
        when diff >= 30
            @project.process = 11
            .
            .
            .
        when diff >= 0
            @project.process = 1
        else
            @project.process = 0
    end
    proc = @project.process.to_f
    case
        when proc >= 9 
            @project.phase = "Final"
        when proc >= 5
            @project.phase = "Desarrollo"
        when proc >= 1
            @project.phase = "Inicio"
        else
            @project.phase = "Error en el proceso"
    end
end
开始
是模型中的时间戳。我认为:
但我得到了一个错误:
“项目中的NoMethodError#show”

如何解决此问题?

根据
的起始位置,您可以在保存
回调之前使用
,这样每次创建新记录时,它触发
update\u phase
方法,并从当前项目对象为
process
phase
分配值:

class Project < ApplicationRecord
  before_save :update_phase

  ...

  def update_phase
    diff = (Date.current.year * 12 + Date.current.month) - (self.starting.year * 12 + self.starting.month)
    case
      when diff >= 30
        self.process = 11
        ...
    end
    proc = self.process.to_f
    case
      when proc >= 9
        self.phase = 'Final'
        ...
    end
  end
end
类项目=30时
self.process=11
...
结束
proc=自处理到
案例
当proc>=9时
self.phase='Final'
...
结束
结束
结束

什么是
开始
?我尝试过这样做,但流程和阶段属性都没有保存在实例中starting是项目模型中的时间戳OOPS,starting是项目中的属性我已经更新了问题和代码,仍然有相同的错误,添加了行“保存之前:更新阶段”出现错误“undefined method`before_save'for Projects controller:Class是什么意思?before_filter”并且每次用户列出项目时都会调用update_阶段,因此它将仅在现有项目上运行您正在使用控制器@IvanHid中的方法,它是类项目上的一个方法,这就是为什么“保存前”
不可用的原因。很抱歉,我将其移动到了控制器,因为在该模型中,它工作了,但没有更新任何属性,它仅为调用的页面显示它们谢谢!将方法移动到模型后,它就工作了!原来我用的是@project而不是self