Ruby on rails 类初始化和数据库有很多关系
这是我的问题…我正在设置一个游戏,几个用户可以玩一个游戏,有10000张彩票。每场比赛将有10000张奖券,直到10000张奖券全部售出后才开始。也就是说,我的DB中有两个简单的类,对于每一个游戏,我都需要为单个游戏关系初始化10000张唯一的票证。我不确定我在这里哪里出错了。任何帮助都将不胜感激 models/game.rbRuby 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 类游戏
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”,这里的问题与下面的相同…我不能从数据库访问控制台中的票证…但是,我应该能够使用票证查看票证。所有这些都是在我创建了一个游戏之后…它们只是没有被创建。谢谢你的帮助。比我的答案更清晰。这解决了你的问题吗?如果是,你能接受这个答案吗?