我正在学习Rails,到目前为止一切顺利。我目前最大的问题是:如何手动在我的数据库中插入一行?我已经有了用于创建DataTypeOne行的脚手架,但是我希望在提交DataTypeOne的表单时创建一行DataTypeTwo(并让它引用DataTypeOne的id ...但我想我可以使用它出我自己的。)
提前致谢。
答案 0 :(得分:5)
您可以通过创建和保存新的ActiveRecord对象(您的模型)在数据库中创建行。
因此,在您的控制器代码中,您可以通过执行
创建一个新的DataTypeTwo行new_record = DataTypeTwo.new
new_record.save!
答案 1 :(得分:4)
正如frankodwyer所说,你真的想要使用Rails协会来陈述一个模型与另一个模型相关的事实。如果存在一对一的关系,那么您将使用
belongs_to
和
<强> HAS_ONE 强>
根据具有外键的型号,您可以使用其中一种。在您的示例中,听起来像DataTypeTwo具有外键,返回DataTypeOne。所以你会有这样的事情:
class DataTypeTwo < ActiveRecord::Base
belongs_to :data_type_one
end
class DataTypeOne < ActiveRecord::Base
has_one :data_type_two
end
你可以用这样的外键创建记录
one = DataTypeOne.create(...)
two = DataTypeTwo.create(...)
two.data_type_one = one
two.save
有一些快捷方式,但这是它的冗长要点。假设您可以通过反射获得所有模型名称和外键,那么您就可以了,否则您必须明确地为键命名。
所有这些都在ActiveRecord文档中详细介绍:
答案 2 :(得分:1)
这是一个很常见的事情,你应该能够通过你的模型做到这一点,而不必考虑手动对数据库做任何事情。
例如,如果您希望DataTypeTwo引用DataTypeOne,那是因为DataTypeTwo'属于'DataTypeOne?或者DataTypeOne'有很多'DataTypeTwo? Rails具有表达所有这些关系和其他关系的约定。当您调用“保存!”时,应将对象和相关项目保存到数据库中。关于相关对象的方法。
你应该看一些更多的rails示例和教程来解决这个问题。除非你做了一些非常不寻常的事情,否则你不应该做更多的事情来注释你的模型并遵循惯例,这样rails就知道什么属于什么。
答案 3 :(得分:1)
您还可以使用以下快捷方式:
DataTypeTwo.create
create方法将创建一个新的DataTypeTwo对象并将记录保存到数据库中。
答案 4 :(得分:1)
除了像Cody Caughlan所描述的那样设置适当的ActiveRecord关联之外,听起来你应该使用ActiveRecord回调来保证在创建DataTypeOne时,创建DataTypeTwo并将其与DataTypeOne相关联。根据您的需要,我猜测before_create
或after_create
可以解决问题。
有关更多详细信息,请参阅ActiveRecord::Callbacks的Rails文档。
答案 5 :(得分:1)
如果您需要更灵活,活动记录还为大多数SQL操作提供了一个sql接口:Database Statements
答案 6 :(得分:1)
您不需要仅使用脚手架在数据库中创建条目。您需要做的就是
./script/console (from your project folder)
这将为您的项目提供命令行驱动的完整Rails环境。你可以在这里尝试任何东西。在您的上下文中,您可以
record = DataTypeTwo.new(:field1 => value1, :field2 => value2)
record.save
在将内容放入代码之前,控制台也是尝试内容的最佳方式