Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql rails--使用模型文件中的方法从保存中丢失数据_Mysql_Ruby On Rails 4 - Fatal编程技术网

Mysql rails--使用模型文件中的方法从保存中丢失数据

Mysql rails--使用模型文件中的方法从保存中丢失数据,mysql,ruby-on-rails-4,Mysql,Ruby On Rails 4,我正在尝试为销售人员创建一个日程安排应用程序。我有一个类“Jobs”,使用以下模式: create_table "jobs", force: true do |t| t.string "job_num" t.string "project" t.string "store_num" t.string "store_name" t.string "address" t.date "start_date" t.date "end_

我正在尝试为销售人员创建一个日程安排应用程序。我有一个类“Jobs”,使用以下模式:

create_table "jobs", force: true do |t| 
    t.string "job_num" 
    t.string "project" 
    t.string "store_num" 
    t.string "store_name" 
    t.string "address" 
    t.date "start_date" 
    t.date "end_date" 
    t.time "time" 
    t.integer "sched_hrs" 
    t.integer "manpower" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.boolean "sat", default: false 
    t.boolean "sun", default: false 
    t.string "timezone" 
end
大多数工作不包括周六或周日的时间,所以我的方法的一部分是包括或跳过这些天。剩下的只是在另一个称为“shift”的模型中创建新的表行——作业可能会跨越许多天,我需要为作业跨越的每一天创建一个新条目(没有存储信息)。这是我的工作模式:

  class Job < ActiveRecord::Base
    has_and_belongs_to_many :agents
    has_many :shifts

    attr_reader :id, :start_date, :end_date, :sched_hrs, :manpower

    validates :job_num, presence: true
    validates :project, presence: true
    validates :store_num, presence: true
    validates :store_name, presence: true
    validates :address, presence: true
    validates :start_date, presence: true
    validates :end_date, presence: true
    validates :time, presence: true 
    validates :sched_hrs, presence: true 
    validates :manpower, presence: true


    after_create :splay


    private

     def splay

        @now_date = Date.parse(@start_date)
        @end_dt = Date.parse(@end_date)
        @j_id = @id
        @j_sh = @sched_hrs
        @j_mp = @manpower

        while @now_date <= @end_dt do 

            if @now_date.saturday? == false && @now_date.sunday? == false
                Shift.create(job_id: @j_id, shift_date: @now_date, shift_hrs: @j_sh, shift_req_agents: @j_mp, shift_available_agents: 0 )
            end

            if @now_date.saturday? == true && self.sat == true
              Shift.create(job_id: @j_id, shift_date: @now_date, shift_hrs: @j_sh,            shift_req_agents: @j_mp, shift_available_agents: 0 )
            end 

            if @now_date.sunday? == true && self.sun == true
             Shift.create(job_id: j_id, shift_date: @now_date, shift_hrs: @j_sh, shift_req_agents: @j_mp, shift_available_agents: 0 )
            end 

            @now_date += 1

            end

     end 
  end
类作业当@now_date开始解决您的问题时,您的“
Sunday
”条件代码引用的是
j_id

if @now_date.sunday? == true && self.sun == true
  Shift.create(job_id: j_id, shift_date: @now_date, shift_hrs: @j_sh, shift_req_agents: @j_mp, shift_available_agents: 0 )
end 
  @job = Job.find(@id)
  @job.shifts << Shift.create(shift_date: @now_date, shift_hrs: @j_sh, shift_req_agents: @j_mp, shift_available_agents: 0 )
您只定义了
@j_id
而不是
j_id
,因此
j_id
可能是
nil

您还可以通过删除
作业id:@j\u id
,利用您的
有很多关联:

if @now_date.sunday? == true && self.sun == true
  Shift.create(job_id: j_id, shift_date: @now_date, shift_hrs: @j_sh, shift_req_agents: @j_mp, shift_available_agents: 0 )
end 
  @job = Job.find(@id)
  @job.shifts << Shift.create(shift_date: @now_date, shift_hrs: @j_sh, shift_req_agents: @j_mp, shift_available_agents: 0 )
可简化为:

  if @now_date.saturday? && self.sat

因为
.satty?
.sat
都返回布尔值

您应该发布完整的错误消息和堆栈跟踪的几行,或者至少说明哪一行抛出了错误。那么您仍然有问题吗?你是在询问代码应该存储在哪里,而不是代码有什么问题吗?让“作业”保存并生成Show视图,然后在Show视图中添加一个按钮,触发一个向“Shift”表提供相关数据的方法。实际上,我不确定该问什么问题。当我让它工作时(在把事情搞糟之前),代码将数据发送到“移位”表——这很好。但是,我访问的任何字段都以某种方式从“作业”表单的提交中被忽略了——数据库中的所有这些字段都显示为nil(这会在作业的Show和index视图中抛出NoMethod错误)。不仅这些实例值没有保存,而且整个列都从Jobs表(包括以前存储的行)中删除。我需要将相关数据输入到轮班表,同时成功保存工作数据。所以我想我要问两个问题——这应该是在模型、控制器还是助手中,我在做什么来删除这些特定的列条目?你说得对,sealocal,现在看这是一片混乱,我没有完全从另一个化身回滚我的代码,因此存在各种不一致的变量,很明显,我对一般的逻辑不太清楚。只是尝试找到正确的组合/策略/语法来保存作业表行,并保存移位表行(有或没有周末)。如果我有一个一致的变量方案可能会有所帮助。为没有更好地检查而道歉。至于错误消息,它们通常被命名为nil.NilClass。字符用完了,仍然在考虑重构的好处。事实上,我之前扩展了这些东西,因为我在运行代码时遇到了困难(我想我使用了错误的变量形式),基本上是在抓救命稻草,尝试我能想到的一切。现在它已经运行了,我觉得重构更舒服了。没问题。很遗憾,我没能为你一针见血,但你似乎已经明白了。祝你好运