アプリケーションで小文字params[:user][:email]
にしようとしていますが、現在は@user = User.new(params[:user])
(電子メールを含む)を使用していdef create
ます。単一のアイテムを除くすべてのアイテムの一括割り当てを許可することはできますか?
大量割り当てを使用できないことはわかっていますが、これが可能かどうか疑問に思っていました。
アプリケーションで小文字params[:user][:email]
にしようとしていますが、現在は@user = User.new(params[:user])
(電子メールを含む)を使用していdef create
ます。単一のアイテムを除くすべてのアイテムの一括割り当てを許可することはできますか?
大量割り当てを使用できないことはわかっていますが、これが可能かどうか疑問に思っていました。
はい。
class User
attr_protected :email
end
使用方法は次のとおりです。
user = User.new(params[:user])
user.email = params[:user][:email].downcase
ただし、email属性を自動的に小文字にしたい場合は、email=
メソッドをオーバーライドするだけで済みます。これを強くお勧めします。
class User < ActiveRecord::Base
def email=(other)
write_attribute(:email, other.try(:downcase))
end
end
Loading development environment (Rails 3.2.5)
irb(main):001:0> User.new({:email => 'Me@you.com'})
=> #<User id: nil, email: "me@you.com", username: nil, created_at: nil, updated_at: nil>
irb(main):002:0> User.new({:email => nil})
=> #<User id: nil, email: nil, username: nil, created_at: nil, updated_at: nil>
attr_protectedを確認する必要があります。これにより、一括割り当てされないようにする属性のみを定義することができます。