我想在我的應用程序,以小寫params[:user][:email]
,但我目前使用@user = User.new(params[:user])
(包括電子郵件)中我def create
。除了單個項目之外,是否可以允許對所有內容進行批量分配?有沒有辦法使用除了一個參數在Ruby on Rails的所有內容的大規模分配?
我知道我可能只是不使用質量分配,但我在想,如果這是可能的。
我想在我的應用程序,以小寫params[:user][:email]
,但我目前使用@user = User.new(params[:user])
(包括電子郵件)中我def create
。除了單個項目之外,是否可以允許對所有內容進行批量分配?有沒有辦法使用除了一個參數在Ruby on Rails的所有內容的大規模分配?
我知道我可能只是不使用質量分配,但我在想,如果這是可能的。
是的。
class User
attr_protected :email
end
這裏是你如何使用它:
user = User.new(params[:user])
user.email = params[:user][:email].downcase
如果你想downcase郵件屬性,雖然自動,你可以簡單地覆蓋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 => '[email protected]'})
=> #<User id: nil, email: "[email protected]", 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。這使您只能定義要防止被質量分配的屬性。