我是Ruby on Rails的新手,我在第一个项目工作。我不是母语为英语的人,所以我没有抬头看谷歌。首先,我想知道,如果你为一个类声明一个初始化方法,如:
def initialize(attributes = {})
@name = attributes[:name]
@email = attributes[:email]
end
或者喜欢:
class Person
def initialize(name, age)
@name, @age = name, age
end
end
我是否必须在控制器或相应类的模型中对该方法进行delcare?
我们在Controller中使用实例变量(@name或@age)是真的吗?我们在迁移文件中声明的模型的intance变量对吗?像:
class CreateStudents < ActiveRecord::Migration
def up
create_table :students do |t|
t.string :prename, :limit => 100, :null=>false
t.string :lastname, :limit => 100, :null=>false
t.date :birthday, :null => false
t.text :contact
t.boolean :daz, :null => false, :default => false
t.integer :form_id
t.timestamps null: false
end
end
def down
drop_table :students
end
端
我的最后一个问题是关于rails中的测试文件。 我读过这样的话: 要求&#39; test_helper&#39;
class StudentTest < ActiveSupport::TestCase
test "hello" do
stud = Student.new
assert_not stud.save
end
end
当我运行&#34; rake test&#34;时,它出现了这个错误:
yannick@Yannux ~/SchulDatenbank $ rake test
Running via Spring preloader in process 5041
Run options: --seed 16904
# Running:
E
Finished in 0.032498s, 30.7711 runs/s, 0.0000 assertions/s.
1) Error:
StudentTest#test_hello:
ActiveRecord::StatementInvalid: SQLite3::ConstraintException:
NOT NULL constraint failed: students.prename: INSERT INTO
"students" ("created_at", "updated_at", "id") VALUES
('2017-03-18 14:04:40', '2017-03-18 14:04:40', 980190962)
1 runs, 0 assertions, 0 failures, 1 errors, 0 skips
然后我尝试了类似的东西: 要求&#39; test_helper&#39;
class StudentTest < ActiveSupport::TestCase
test "hello" do
assert true
end
end
相同的错误...... 有谁知道为什么? :) 谢谢你的帮助
答案 0 :(得分:0)
您正在迁移中使用数据库约束&#34; pername&#34; (null:false)。 因此,当您在测试中调用 stud.save 时出现错误,因为您的stud正在尝试使用空白pername字段保存db中的stud记录。也许,最好使用有效? 保存: