我正在创建一个Web应用程序作为一个培训项目,它将采用三个输入(骰子数量,边数和卷数的整数值)并将其输入到一系列表格中,这将有助于计算和输出结果,以及历史数据的保存(过去的卷数。)
我被卡住了。
以下是表单的ERB:
<%= form_for(@run) do |f| %>
How many dice: <%= f.number_field :die_count, :placeholder => "# of dice" %><br>
How many sides: <%= f.number_field :die_sides, :placeholder => "# of sides" %><br>
How many rolls: <%= f.number_field :rolls, :placeholder => "# of rolls" %><br>
<%= f.submit "Roll!" %>
<% end %>
这是我的模特:
class Run < ActiveRecord::Base
has_many :rolls
belongs_to :user
validates_presence_of :die_count, :rolls, :die_sides
validates_numericality_of :die_count, :die_sides, :rolls
end
这是我的相关控制器信息:
def new
@run = Run.new
end
def create
@run = Run.new(run_params)
end
private
def run_params
params.require(:run).permit(:die_count, :die_sides, :rolls)
end
为了更好的衡量,这里是用于制作我的数据库表的迁移:
class CreateRuns < ActiveRecord::Migration
def change
create_table :runs do |t|
t.integer :die_count
t.integer :die_sides
t.integer :roll_count
t.timestamps null: false
end
end
end
此时,我只想让它在Run模型中创建一条新记录。这是我输入5,5和5到number_fields并单击我的提交按钮时出现的错误:
如果我正确读取这个,我的应用程序想要遍历各个数字,就像它们是数组一样,但它不能因为它们是字符串而不是。这让我感到困惑,因为它们首先不是字符串。它们是整数。
把头发拉出来。
答案 0 :(得分:0)
我认为您的意思是在代码中的任何地方用rolls
替换roll_count
。
How many rolls: <%= f.number_field :roll_count, :placeholder => "# of rolls" %><br>
和
validates_presence_of :die_count, :roll_count, :die_sides
validates_numericality_of :die_count, :die_sides, :roll_count
和
def run_params
params.require(:run).permit(:die_count, :die_sides, :roll_count)
end
答案 1 :(得分:0)
:rolls
是对另一个名为Roll
的模型的引用(你创建了吗?)。
:roll_count
是Run
模型的属性,用于定义卷数(在迁移表中可见)。
它们是两个非常不同的东西,尽管理论上:roll_count
理论上应该等于Roll
记录'拥有'的Run
记录的数量。
在表单中,将:rolls
替换为:roll_count
。在控制器的run_params
方法中执行相同操作。还有你模型中的两个验证。 (清单: 4 您需要修改该符号名称的地方)。
在您的控制器中,还要将create
方法的内容更改为@run = Run.create(run_params)
。
已编辑(清晰度):Run.new(params)
创建Run
对象的新实例,但不会将其保存在数据库中。 Run.create(params)
创建对象并保存。
最后,在你的模型中,注释掉has_many :rolls
,直到你实际实现了Roll
模型(没有双关语!);如果belongs_to :user
模型未实现,则对User
执行相同操作。
完成这些更改后,您的表单通常应该正常工作,数据应保存在runs
数据库表中。