【问题标题】:Why Ruby on Rails' User.create!(:email => 'ha', :identifier => 'foo') not work?为什么 Ruby on Rails 的 User.create!(:email => 'ha', :identifier => 'foo') 不起作用?
【发布时间】:2011-06-28 01:19:15
【问题描述】:

(我使用的是 Rails 2.2.2,但应该与 2.3.5 或 3.0 非常相似)

以下行有效:

User.create!(:email => 'ha')

但是我生成了一个迁移并将identifier添加到用户表中,并重新启动了Rails控制台,并使用了

User.create!(:email => 'bar', :identifier => 'foo')    

创建此用户,并且电子邮件字段设置为 bar(如 mysql 中所示)但 identifier 未设置为 foo... 有什么原因吗?


db/schema.rb:

create_table "users", :force => true do |t|
  t.string   "login"
  t.string   "email"
  t.string   "crypted_password",                  :limit => 40
  t.string   "salt",                              :limit => 40
  t.datetime "created_at"
    [...]
  t.string   "short_bio"
  t.string   "identifier"
end

【问题讨论】:

  • 那是您实际复制粘贴的代码吗?如果是这样,你有一个错字。如果没有,请发布您的实际代码。
  • 哦...错字已修复...不是因为错字...
  • 您正确使用了create! 命令。如果您想要比这更好的答案,您需要向我们展示一些代码。至少您的模型和架​​构。
  • @Jack yes... 并且 Rails 控制台返回的对象确实显示了一个 identifier 字段... db 日志还显示了一个 INSERTidentifier,除了它的值是 @987654333 @...但是score的默认值是20,所以我想知道是否有一个地方可以设置默认值...应该在models/user.rb中吗?

标签: ruby-on-rails ruby-on-rails-3 activerecord restful-authentication


【解决方案1】:

尝试将attr_accessible 添加到User 模型:

def User
  attr_accessible :identifier
end

如果你不想为identifier添加attr_accessible(因为应该不允许用户设置自己的标识符),那么你需要先保存用户,然后单独设置标识符:

User.create!(:email => "a@a.com")

u = User.find_by_email("a@a.com")
u.identifier = "foo"
u.save!

【讨论】:

  • 这个规则是什么...所以createcreate!都需要这个attr_accessible :field_name才能设置任何初始值?有这方面的文档/教程吗?谢谢。
  • attr_accessible 表示属性可以“批量分配”,例如从表单获取属性时。查看guides.rubyonrails.org/security.html#mass-assignment
  • 啊,我明白了...这是为了保护黑客在代码使用“批量分配”时将随机记录发布到表中...所以 attr_accessible 是“白名单”可以是的东西质量分配...
猜你喜欢
  • 1970-01-01
  • 2017-07-11
  • 1970-01-01
  • 2015-10-16
  • 1970-01-01
  • 2015-06-07
  • 2015-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多