3

我正在尝试params[:user][:email]在我的应用程序中小写,但目前我@user = User.new(params[:user])在我的def create. 是否可以允许对除单个项目之外的所有内容进行批量分配?

我知道我不能使用批量分配,但我想知道这是否可能。

4

2 回答 2

1

是的。

class User
  attr_protected :email
end

下面是你如何使用它:

user = User.new(params[:user])
user.email = params[:user][:email].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 => '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>
于 2012-06-02T19:56:08.327 回答
0

你应该看看 attr_protected。这使您可以仅定义要防止被批量分配的属性。

http://api.rubyonrails.org/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html#method-i-attr_protected

于 2012-06-02T19:26:28.870 回答