除了Ruby on Rails中的一个参数之外,有没有办法为除了一个参数之外的所有东西使用质量赋值?

时间:2012-06-02 19:18:00

标签: ruby-on-rails

我正在尝试在我的应用中小写params[:user][:email],但目前我正在@user = User.new(params[:user])中使用def create(包括电子邮件)。是否可以为除了单个项目之外的所有内容进行批量分配?

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

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

你应该看一下attr_protected。这使您只能定义要阻止批量分配的属性。

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