true do-6ren">
gpt4 book ai didi

ruby-on-rails - 在 Rails 中初始化 "new users"

转载 作者:行者123 更新时间:2023-12-04 06:22:58 25 4
gpt4 key购买 nike

我正在创建一个 Ruby on Rails 应用程序,并且正在尝试创建/登录/注销用户。

这是 Users 的架构:

  create_table "users", :force => true do |t|
t.string "first_name"
t.string "last_name"
t.text "reputation"
t.integer "questions_asked"
t.integer "answers_given"
t.string "request"
t.datetime "created_at"
t.datetime "updated_at"
t.string "email_hash"
t.string "username"
t.string "hashed_password"
t.string "salt"
end

用户的个人信息(用户名、名字/姓氏、电子邮件)通过 POST 填充。其他诸如questions_askedreputation等都是应用设置的,所以在我们创建新用户的时候应该初始化。现在,我只是在 UsersControllercreate 方法中手动设置每一个:

  def create
@user = User.new(params[:user])
@user.reputation = 0
@user.questions_asked = 0
@user.answers_given = 0
@user.request = nil
...
end

有没有更优雅/更有效的方法来做到这一点?

最佳答案

params[:user] 只是一个哈希,您可以创建一个哈希并将其与参数合并,如

def create
params[:user].merge(
{
:reputation => 0,
:questions_asked => 0,
:answers_given => 0
...
}
)

@user = User.new(params[:user])
end

如果您想从 Controller 中删除该代码,您可以将其移动到您的模型中,然后添加一个 after_create 过滤器。

但实际上,如果它只是将事物设置为 0,请在数据库列中设置默认值,您甚至不必在代码中处理它..

  create_table "users", :force => true do |t|
t.string "first_name"
t.string "last_name"
t.text "reputation", :default => 0
t.integer "questions_asked", :default => 0
t.integer "answers_given", :default => 0
t.string "request"
t.datetime "created_at"
t.datetime "updated_at"
t.string "email_hash"
t.string "username"
t.string "hashed_password"
t.string "salt"
end

如果您无法重做迁移,请使用 change_column_default 之类的

class SetDefaultsOnUsers < ActiveRecord::Migration
def self.up
change_column_default "users", "reputation", 0
end

def self.down
change_column_default "users", "reputation", default
end
end

关于ruby-on-rails - 在 Rails 中初始化 "new users",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2710725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com