get 'users/register'
post 'users/register'
这里把 get 和 post 都路由到同一个 action 了,get 访问的时候就调用 user_params,这时候 params 是空的。应该把 get 和 post 的 action 分开。
PS:看的是什么书?
正常来说,get 和 post 应该有两个 action:
resources :users, only: [:new, :create]
# 等同于
get 'users/new', to 'users#new'
post 'users', to: 'users#create'
PS:如果你不用这种 Rails 默认的路由格式,就要在 form_for 加上 url
参数。
def new
@user = User.new
end
def create
@user = User.new(params.require(:user).permit(...))
if @user.save
# ...
else
render :new
end
end
此时表单页面文件名改为 new.html.erb
。
合在一个 action 也不是不可以,但不是 Rails 推荐的做法:
def register
if request.get?
@user = User.new
else
@user = User.new(params.require(:user).permit(...))
if @user.save
# ...
else
render :register
end
end
end
更多路由知识看官方文档 http://guides.ruby-china.org/routing.html