我正在创建一个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_asked
,reputation
等)由应用程序设置,因此应在创建新用户时初始化。现在,我只是在create
UsersController
方法中手动设置每个 def create
@user = User.new(params[:user])
@user.reputation = 0
@user.questions_asked = 0
@user.answers_given = 0
@user.request = nil
...
end
:
{{1}}
有更优雅/更有效的方法吗?
答案 0 :(得分:8)
params [:user]只是一个哈希,你可以创建一个哈希并将其与params合并,如
def create
params[:user].merge(
{
:reputation => 0,
:questions_asked => 0,
:answers_given => 0
...
}
)
@user = User.new(params[:user])
end
如果您想从控制器中删除该代码,只需添加一个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_defaultclass SetDefaultsOnUsers < ActiveRecord::Migration
def self.up
change_column_default "users", "reputation", 0
end
def self.down
change_column_default "users", "reputation", default
end
end
答案 1 :(得分:0)