【问题标题】:Rails database seeding by calling controller methods通过调用控制器方法为 Rails 数据库播种
【发布时间】:2017-02-24 21:59:24
【问题描述】:

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

有什么方法可以简单地调用seeds.rb 中的控制器创建方法,这样我就不必重复代码了?

举个例子:我想创建 100 个联赛。创建联赛时,我会以辅助方法创建球员和球队以配合它。我想简单地调用 League.create 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
}

还有我的leagues_controller(为了便于阅读,我已经简化了代码):

def create
        @league = LeaguesAndTeams::League.new(league_params)
        puts "In the league create method"
        respond_to do |format|
            if @league.save
                # Initialization: I know this isn't the best idea to have them here, I simply put it here for demonstration purposes.
                create_team_players
                create_teams

                # Successful creation, redirect
                format.html { redirect_to leagues_and_teams_league_path(@league.id), notice: 'League was successfully created.' }
                format.json { render :show, status: :created, location: @league }
            else
                format.html { render :new }
                format.json { render json: @league.errors, status: :unprocessable_entity }
            end
        end
    end

【问题讨论】:

    标签: ruby-on-rails seeding


    【解决方案1】:

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

    after_save :create_team_players, :create_teams
    

    现在将在 create action 和您的 seed.rb

    中调用此函数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-14
      • 2013-05-19
      • 1970-01-01
      • 2013-09-26
      • 1970-01-01
      • 2017-07-29
      • 2013-05-02
      相关资源
      最近更新 更多