Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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
Ruby on rails 类初始化和数据库有很多关系_Ruby On Rails_Database_Relationship_Has Many - Fatal编程技术网

Ruby on rails 类初始化和数据库有很多关系

Ruby on rails 类初始化和数据库有很多关系,ruby-on-rails,database,relationship,has-many,Ruby On Rails,Database,Relationship,Has Many,这是我的问题…我正在设置一个游戏,几个用户可以玩一个游戏,有10000张彩票。每场比赛将有10000张奖券,直到10000张奖券全部售出后才开始。也就是说,我的DB中有两个简单的类,对于每一个游戏,我都需要为单个游戏关系初始化10000张唯一的票证。我不确定我在这里哪里出错了。任何帮助都将不胜感激 models/game.rb class Game < ActiveRecord::Base has_many :tickets end 类游戏

这是我的问题…我正在设置一个游戏,几个用户可以玩一个游戏,有10000张彩票。每场比赛将有10000张奖券,直到10000张奖券全部售出后才开始。也就是说,我的DB中有两个简单的类,对于每一个游戏,我都需要为单个游戏关系初始化10000张唯一的票证。我不确定我在这里哪里出错了。任何帮助都将不胜感激

models/game.rb

 class Game < ActiveRecord::Base
    has_many :tickets
 end
类游戏
models/ticket.rb

 class Ticket < ActiveRecord::Base
    belongs_to :game
 end
classticket
控制器/游戏\u controller.rb

 class GamesController < ApplicationController

 def create
     g = Game.new
     g.winning_ticket_num = params["winning_ticket_num"]
     g.value_per_ticket = params["value_per_ticket"]
     g.save
     10000.times do 
       ticket = Ticket.new
       ticket.game_id = g.id
       ticket.nickname = "null"
       ticket.save
     end
 end 


 end
 class TicketsController < ApplicationController

def create
    t = Ticket.new
    t.nickname = params["nickname"]
    t.game_id = params["game_id"]
    t.save
end

 end
class GamesController
控制器/票证\u controller.rb

 class GamesController < ApplicationController

 def create
     g = Game.new
     g.winning_ticket_num = params["winning_ticket_num"]
     g.value_per_ticket = params["value_per_ticket"]
     g.save
     10000.times do 
       ticket = Ticket.new
       ticket.game_id = g.id
       ticket.nickname = "null"
       ticket.save
     end
 end 


 end
 class TicketsController < ApplicationController

def create
    t = Ticket.new
    t.nickname = params["nickname"]
    t.game_id = params["game_id"]
    t.save
end

 end
class ticketcontroller
不要自己设置ID,请使用。请注意,
tickets.create
将在创建Ticket对象时将其保存到数据库中(这似乎是您在上面想要做的)


编辑:语法错误,
=
更改为
=>
。同时删除
票据。
部分。对不起,这是在没有测试的情况下发生的。

我看到的事情是错误的,如果您使用form_for,那么参数是params[:game]

class GamesController < ApplicationController

def create
    g = Game.new
    g.winning_ticket_num = params[:game]["winning_ticket_num"]
    g.value_per_ticket = params[:game]["value_per_ticket"]
    g.save
    10000.times do 
      ticket = Ticket.new
      ticket.game_id = g.id
      ticket.nickname = "null"
      ticket.save
    end
end 
end
class GamesController

因此,添加params[:game]将在交换所有评论后获得值,让我们总结一下:

class GamesController < ApplicationController
  def create
    @game = Game.new(params[:game])

    10000.times do
      @game.tickets.build(nickname: "null")
    end

    @game.save
  end
end 
class GamesController
Game.new根据视图中的参数创建游戏。“赢票数量”和“每张票的价值”将自动“复制”到您的新游戏对象中。您必须确保可以使用Rails中的强参数或Rails<4.0中的attr_accessible为这些参数赋值


@game.tickets.build创建10000张彩票。游戏的ID将在游戏最终保存时自动分配。此外,在保存父游戏时,门票本身也将被保存

感谢您的快速回复…使用此代码(字面上是子脚本),如果我说g1=game,我仍然会在控制台中遇到问题。创建…然后我运行game.all我显示游戏,但当我运行Ticket.all时,不会返回任何内容。我仍然不确定问题出在哪里,或者我是否试图错误地访问它们。感谢您的帮助。据我从您的评论中了解,您正在尝试使用Game.create从您的控制台“测试”游戏的创建。这确实会创建一个游戏对象,但不会在控制器中执行代码!因此,不会创建任何票证!啊,谢谢…那么什么是一个很好的测试方法…写一些简单的html和显示,一旦我创建了一个游戏?有没有一种更快的方法来测试解决方案?有两种方法:编写一些简单的视图来调用您的控制器操作(或者使用rails脚手架为您的操作获取每个视图的第一个版本),或者使用类似rspec/cucumber的方法来进行测试驱动开发……对不起。昵称=不起作用。它需要是一个散列,或者至少是昵称:“null”,这里的问题与下面的相同…我不能从数据库访问控制台中的票证…但是,我应该能够使用票证查看票证。所有这些都是在我创建了一个游戏之后…它们只是没有被创建。谢谢你的帮助。比我的答案更清晰。这解决了你的问题吗?如果是,你能接受这个答案吗?