簡體   English   中英

未定義的局部變量或delay_job的方法

[英]undefined local variable or method for delayed_job

我正在嘗試修改我在App模型上的現有回調,以通過延遲作業執行。 刪除應用程序時,出現undefined local variable or method app_name for main:Object的錯誤undefined local variable or method app_name for main:Object

app / models / app.rb

# == Schema Information
#
# Table name: apps
#
#  id           :integer          not null, primary key
#  name         :string(255)
#  created_at   :datetime
#  updated_at   :datetime
#  app_type     :string(255)
#  package_name :string(255)
#  icon         :string(255)
#

# app/models/app.rb
class App < ActiveRecord::Base
  has_many :versions, dependent: :destroy

app / models / version.rb

class Version < ActiveRecord::Base
  DEFAULT_ICON_URL = 'placeholder_med@2x.png'
  belongs_to :app
  delegate :name, :id, :users, :app_type, to: :app, prefix: true
  after_create :notify_subscribers
  before_destroy :remove_stored_files

  scope :since, ->(time) { where('created_at > ?', time) }

  def updated_or_created_at
    updated_at || created_at
  end

  def display_icon
    if icon_url.blank? || icon_url.match(/default.png/)
      DEFAULT_ICON_URL
    else
      icon_url
    end
  end

  def main?
    version_type == 'main'
  end

  def release_notes?
    !release_notes_url.blank?
  end

  private

  def notify_subscribers
    AppMailer.notify_new_build(id)
  end

  def remove_stored_files
    Delayed::Job.enqueue(DeleteAppFilesJob.new(app_name, version_number, build_number), priority: 1, run_at: 5.minute.from_now)
  end
end

app / jobs / delete_app_files_job.rb

class DeleteAppFilesJob < Struct.new(app_name, version_number, build_number)
  def perform
    remove_stored_files(app_name, version_number, build_number)
  end

  protected

  def remove_stored_files(app_name, version_number, build_number)
    S3_BUCKET.objects.select { |obj| obj.key.match(%r{(ios|android)/#{app_name}/#{version_number}/#{build_number}}) }.each do |obj|
      puts "Deleting #{obj.key}"
      obj.delete
    end
  end
end

要創建一個匿名的Struct (在子類化時通常需要這樣),您可以將Symbol參數傳遞給Struct.new

class DeleteAppFilesJob < Struct.new(:app_name, :version_number, :build_number)

您正在嘗試傳遞不存在的變量,因此會出現“未定義的局部變量或方法”錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM