0

我有一个带有模型属性的数组(这些模型属性是数据库表中的列)。我正在尝试遍历这个数组并自动创建一条我想保存到数据库表的记录,如下所示:

columns.each_with_index do |c, i|
  user.c = data[i]
  puts user.c
end

user是模型。但是如果我尝试上面的代码片段,我会得到

undefined method `c=' for #<User:0x007f8164d1bb80>

我也试过

columns.each_with_index do |c, i|
  user."#{c}" = data[i]
  puts user."#{c}"
end

但这也行不通。

数组中的数据columns取自发送用户的表单,所以我只想保存他发送给我的数据,但我仍然无法弄清楚......

我想请你帮忙......提前谢谢你!

4

3 回答 3

3
user.send("#{c}=".to_sym, data[i])

此外,您可以将属性作为散列访问。

user.attributes[c] = data[i]
于 2013-02-28T18:47:41.850 回答
0

最好的办法可能是构建一个哈希并使用 update_attributes:

mydata = {}
columns.each_with_index{|c, i| mydata[c] = data[i]}
user.update_attributes(mydata)

这样您就可以保留attr_accessible.

于 2013-02-28T18:48:58.807 回答
0

如果这实际上是在控制器中,您可以使用一些基本的 rails 约定并像这样构建用户记录:

@user = User.new(params[:user])
if @user.save
  # do something
else
  # render the form again
end

尽管您可以使用 设置值send,但我同意@DaveS 您可能希望通过attr_accessibles 保护自己。如果您计划使用 Rails 4,这里有一个很好的概述

于 2013-02-28T18:54:56.633 回答