Ruby on rails 通过调用控制器方法进行Rails数据库种子设定

Ruby on rails 通过调用控制器方法进行Rails数据库种子设定,ruby-on-rails,seeding,Ruby On Rails,Seeding,我想在我的测试数据库中植入一些“联盟”模型。在my leagues_controller中,create方法不仅创建联盟,还调用与每个联盟模型相关的许多初始化方法。据我所知,当我在db/seeds.rb中调用一个方法时,实际上并没有调用controller方法(我通过运行seeds.rb中当前的方法确认了这一点,并注意到各种初始化方法没有运行) 有没有什么方法可以简单地调用seeds.rb中的controller create方法,这样就不必重复代码 这里有一个例子:我想创建100个联赛。当一个

我想在我的测试数据库中植入一些“联盟”模型。在my leagues_controller中,create方法不仅创建联盟,还调用与每个联盟模型相关的许多初始化方法。据我所知,当我在db/seeds.rb中调用一个方法时,实际上并没有调用controller方法(我通过运行seeds.rb中当前的方法确认了这一点,并注意到各种初始化方法没有运行)

有没有什么方法可以简单地调用seeds.rb中的controller create方法,这样就不必重复代码

这里有一个例子:我想创建100个联赛。当一个联盟建立起来时,我会用助手的方法创建球员和球队。我只想打电话给联盟。创造100次,而不必担心也创造球队和球员。以下是我的代码:

db/seeds.rb:

number = 1
number_of_teams = 8
100.times {
    league_name = "Seed" + number.to_s
    if number > 33
        number_of_teams = 10
    elsif number_of_teams > 67
        number_of_teams = 12
    end
    # Needs to be modified, we want to call the controller method
    LeaguesAndTeams::League.create(name: league_name, number_of_teams: number_of_teams)
    number += 1
}
和我的联盟控制器(为了便于阅读,我简化了代码):


一个好的解决方案是在模型中使用回调。因此,在联盟模型文件中,您可以执行以下操作

after_save :create_team_players, :create_teams
现在将在创建操作种子.rb中调用此函数

after_save :create_team_players, :create_teams