我想使用一些现有记录在我的mysql数据库中创建一些记录。我正在使用rails 4.2
这是我控制器中的相关代码:
linkconfig_id = 17
new_config = Linkconfigdetail.where(:linkconfig_id => user_params[:linkconfig_id])
new_config.each do |config|
config[:linkconfig_id] = linkconfig_id
config[:id] = nil
config[:created_at] = nil
config[:updated_at] = nil
end
Linkconfigdetail.create(new_config)
new_config变量包含Linkconfigdetail模型的一些数据集。我想略微更改它们然后将它们保存为新的,但我收到错误消息:
ArgumentError (When assigning attributes, you must pass a hash as an argument.):
和create-method的行。
我已经查过了。 new_config-array不是nil。在创建(使用inspect)之前看起来像这样:
#<ActiveRecord::Relation [#<Linkconfigdetail id: nil, linkconfig_id: 17, link_id: 1, location: 0, created_at: nil, updated_at: nil>, #<Linkconfigdetail id: nil, linkconfig_id: 17, link_id: 18, location: 1, created_at: nil, updated_at: nil>, #<Linkconfigdetail id: ...
我很欣赏这个问题的每一个提示或任何其他解决方案。我无法想象,这太难了。即使更改数据集,我也遇到了很多问题。像删除这样的许多方法都不起作用,但我终于无法找到解决此问题的方法。
答案 0 :(得分:4)
您无法传递{H}作为create
的关系或其他实例。相反,您可以复制原始文件,创建一个新的实例,但不保留与原始值相同的值(id
,created_at
和updated_at
属性除外),并在保存之前更改所需的属性它
你可以这样做:
linkconfig_id = 17
configs = Linkconfigdetail.where(:linkconfig_id => user_params[:linkconfig_id])
configs.each do |config|
new_config = config.deep_dup
new_config.link_config_id = linkconfig_id
new_config.save
end
答案 1 :(得分:2)
你正在将一个对象传递给create
,而它应该是一个哈希(但是嘿,这正是错误所说的,不是吗?))
为了得到你需要的东西,你可以使用attributes
方法:
new_config.each do |config|
Linkconfigdetail.create(config.attributes)
end