我有一个带有模型属性的数组(这些模型属性是DB表中的列)。我试图遍历这个数组并自动创建一个我想保存到DB表的记录,如下所示:
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
数组中的数据来自发送用户的表单,因此我只想保存他发送给我的数据,但我仍然无法弄清楚...
我想请你帮忙...先谢谢你!
答案 0 :(得分:3)
user.send("#{c}=".to_sym, data[i])
此外,您可以将属性作为哈希值来访问。
user.attributes[c] = data[i]
答案 1 :(得分:0)
最好的办法可能是构建一个哈希并使用update_attributes:
mydata = {}
columns.each_with_index{|c, i| mydata[c] = data[i]}
user.update_attributes(mydata)
这样您就可以保留attr_accessible
提供的保护。
答案 2 :(得分:0)
如果这实际上是在控制器中,您可以使用一些基本的rails约定并构建如下的用户记录:
@user = User.new(params[:user])
if @user.save
# do something
else
# render the form again
end
虽然您可以使用send
设置值,但我同意@DaveS您可能希望通过attr_accessible
保护自己。如果您打算使用Rails 4,here's a good overview。