Rails Rake 任务在使用 NameSpacing 建立模型关系时看不到模型

问题描述 投票:0回答:1

rails 6.1.4
ruby 3.1.1

我的应用程序中有一个子目录:

living_muay_thai
我的应用程序遇到了一些问题,因为我在模型中使用了这样的命名空间:
LivingMuayThai::Student
。在 StackOverflow 上的一些帮助下,我解决了这些问题。但我还有另一个有类似问题的人需要帮助。我无法通过教程和 Google 找到任何帮助,所以我再次在这里询问。

我有一个 rake 任务来预先填充数据表。它在我的本地计算机上运行良好,但当我将其推送到 Herokku 时却运行不佳。

我尝试使用较短的模型名称(

Level, Requirement, LevelRequirement
,但它们不起作用。然后我想可能是rake任务不在
app/
目录中。我尝试
require
模型,但确实如此)不工作。我被困住了。

我的耙子文件:

namespace :living_muay_thai do
    
    desc "create level requirements records"
    task :level_requirements_upload => :environment do

        @reqs.each_line do |line|
          parts = line.split(",")
            parts[0].strip!
            parts[1].strip!

            req=LivingMuayThai::Requirement.create(:requirement_name => parts[1])

        # we have levels in the db, so add the level requirement here
        level=LivingMuayThai::Level.where(:level_name => parts[0]).first

        if level.present?
            lr=LivingMuayThai::LevelRequirement.create(:level_id => level.id, :requirement_id => req.id)
        end 

        end # reqs.each
    end # task
end

PG::UndefinedTable: ERROR: relation "living_muay_thai_level_requirements" does not exist

我的模型位于

living_muay_thai/
目录中。我已将它们更改为按照另一个线程中的指示使用模块。这解决了其他问题,但随后又出现了这个问题。

型号:


# level

module LivingMuayThai
    class Level < ApplicationRecord

        has_many :student_levels
        has_many :students, through: :student_levels

        validates :color, presence: true
        validates :level_name, presence: true, uniqueness: true

        has_many :level_requirements
        has_many :requirements, through: :level_requirements
    end 
end



# requirement

module LivingMuayThai
    class Requirement < ApplicationRecord
        has_many :level_requirements
        has_many :levels, through: :level_requirements
        
        has_many :requirement_techniques
        has_many :techniques, through: :requirement_techniques
    end
end



#level_requirement

module LivingMuayThai
  class LevelRequirement < ApplicationRecord
    belongs_to :level, class_name: 'Level', foreign_key: :level_id
    belongs_to :requirement, class_name: 'Requirement', foreign_key: :requirement_id

    validates_uniqueness_of :level_id,  scope: :requirement_id 
  end
end

感谢您的帮助和见解。

ruby-on-rails rake-task ruby-on-rails-6.1
1个回答
0
投票

我现在在 Heroku 上工作了。 @max 在 Heroku 上的类似帖子中回复了我:Heroku Rake 在 Rake 任务中看不到命名空间模型

他注意到我的连接表上的外键是

integer
而不是
bigint
,他提到 Posgres 可能会对这些外键产生不满。我在所有连接表上完成并创建了更新迁移,以将这些键更改为
bigints

我在 Heroku 上运行了迁移并运行了 rake 任务。效果很好。我猜 Posgres 现在很高兴。

# Example of change migration:

class ChangeIdsInLevelRequirements < ActiveRecord::Migration[6.1]
  def change 
    change_column :living_muay_thai_level_requirements, :level_id, :bigint
    change_column :living_muay_thai_level_requirements, :requirement_id, :bigint    
  end
end
© www.soinside.com 2019 - 2024. All rights reserved.