0

モデル属性の配列があります (これらのモデル属性は 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送信者のフォームから取得されているので、彼が送信したデータのみを保存したいのですが、まだわかりません...

助けを求めたいのですが...よろしくお願いします!

4

3 に答える 3

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

また、属性にハッシュとしてアクセスできます。

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

これが実際にコントローラーにある場合は、いくつかの基本的なレール規則を利用して、次のようにユーザーレコードを作成できます。

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

を使用して値を設定できますが、 sを使用sendして自分自身を保護したいという@DaveSに同意しますattr_accessible。Rails 4の使用を計画している場合は、ここに概要があります

于 2013-02-28T18:54:56.633 に答える
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 に答える