Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.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/5/ruby/20.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 基本Rails问题:手动将行插入数据库表_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Ruby on rails 基本Rails问题:手动将行插入数据库表

Ruby on rails 基本Rails问题:手动将行插入数据库表,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我正在学习Rails,目前进展顺利。目前我最大的问题是:如何手动将一行插入数据库?我已经准备好了创建DataTypeOne行的脚手架,但我希望在提交DataTypeOne表单时创建DataTypeTwo行(并让它引用DataTypeOne的id…但我想我可以自己解决这个问题) 提前感谢。您可以通过创建和保存新的ActiveRecord对象(您的模型)在数据库中创建行 因此,在控制器代码中,您可以通过 new_record = DataTypeTwo.new new_record.save! 这

我正在学习Rails,目前进展顺利。目前我最大的问题是:如何手动将一行插入数据库?我已经准备好了创建DataTypeOne行的脚手架,但我希望在提交DataTypeOne表单时创建DataTypeTwo行(并让它引用DataTypeOne的id…但我想我可以自己解决这个问题)


提前感谢。

您可以通过创建和保存新的ActiveRecord对象(您的模型)在数据库中创建行

因此,在控制器代码中,您可以通过

new_record = DataTypeTwo.new
new_record.save!

这是一件非常常见的事情,您应该能够通过您的模型来完成,而不必考虑手动对数据库执行任何操作

例如,如果您希望DataTypeTwo引用DataTypeOne,是否因为DataTypeTwo“属于”DataTypeOne?或者DataTypeOne“有很多”DataType2的东西?Rails具有表示所有这些类型的关系和其他关系的约定。调用“保存”时,将对象和相关项保存到数据库应该是自动的方法在相关对象上执行


您应该看看更多的rails示例和教程来了解这一点。除非您正在做一些非常不寻常的事情,否则您不需要做更多的事情,只需注释您的模型并遵循约定,这样rails就知道什么属于什么。

您还可以使用以下快捷方式:

DataTypeTwo.create

create方法将创建一个新的DataTypeTwo对象并将记录保存到数据库中。

正如frankodwyer所说,您确实希望使用Rails关联来声明一个模型与另一个模型相关的事实。如果存在一对一的关系,那么您将使用

属于

有一个

根据具有外键的型号,可以使用其中一个。在您的示例中,听起来DataTypeTwo具有外键,返回到DataTypeOne。所以你会有这样的想法:

class DataTypeTwo < ActiveRecord::Base
  belongs_to :data_type_one
end


class DataTypeOne < ActiveRecord::Base
  has_one :data_type_two
end
有一些捷径,但这是它冗长的要点。假设所有的模型名和外键都可以通过反射获得,那么就可以了,否则就必须显式地命名这些键

ActiveRecord文档详细介绍了所有这些:


除了像Cody Caughlan所描述的那样设置适当的ActiveRecord关联之外,听起来您应该使用ActiveRecord回调来保证在创建DataTypeOne时,DataTypeTwo被创建并与DataTypeOne关联。根据您的需要,我猜创建之前的
或创建之后的
会起作用


有关更多详细信息,请参阅的Rails文档

如果您需要更灵活,active records还为大多数sql操作提供了一个sql接口:

您不需要使用脚手架在数据库中创建条目。你需要做的就是

./script/console (from your project folder)
这将为您的项目提供一个命令行驱动的完整Rails环境。你可以在这里尝试任何东西。在你的背景下,你可以这样做

record = DataTypeTwo.new(:field1 => value1, :field2 => value2)
record.save

控制台也是在将内容放入代码之前试用的最佳方式

如何指定列数据?@takua108:请告诉我们您是如何指定列数据的!基本上我有节点和连接器。连接器将节点连接到多个节点。当我创建一个新节点时,我希望用户能够创建新的连接器,而这些连接器不会导致新节点……就像维基百科中的“红色链接”。这些节点/连接是否应该作为某种图形或树?您也可以在rails中找到此类内容的注释/插件。寻找像acts_as_graph/acts_as_tree等插件。
record = DataTypeTwo.new(:field1 => value1, :field2 => value2)
record.save