Chr*_*ner 2 ruby mysql activerecord ruby-on-rails
我想使用一些现有记录在我的 mysql 数据库中创建一些记录。我正在使用导轨 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)
Run Code Online (Sandbox Code Playgroud)
new_config 变量包含 Linkconfigdetail-model 的一些数据集。我想稍微改变它们,然后将它们另存为新的,但我收到错误消息:
ArgumentError (When assigning attributes, you must pass a hash as an argument.):
Run Code Online (Sandbox Code Playgroud)
和创建方法的行。
我已经检查过了。new_config-array 不为零。在创建之前(使用检查),它看起来像这样:
#<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: ...
Run Code Online (Sandbox Code Playgroud)
我很欣赏每一个提示,或者一般来说这个问题的任何其他解决方案。我无法想象,这太难了。我什至在更改数据集时已经遇到了很多问题。很多方法比如delete都行不通,但是我最终还是找不到解决这个问题的方法。
您不能传递关系或其他实例,而不是 Hash for 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1678 次 |
| 最近记录: |