新手问题 dfdfar

torubylist · 2015年09月27日 · 最后由 torubylist 回复于 2015年09月28日 · 1462 次阅读

fda

排版不合格。

再把行号去掉,不然回答的人不能直接复制粘贴。

照着书本写到这里的时候不动了。

什么不动了?

问题出在哪里?

问题在哪里?

#5 楼 @rei 出现 param is missing or the value is empty: user 这个错误。这个 user 的值为啥是空的呢,如果是这个问题那应该是 erb 文件有错误,可是我看了 erb 文件也没有问题啊。所以就不知道咋错了。

Controller 的内容贴全,routes.rb 也贴出来。

get 'users/register'
post 'users/register'

这里把 get 和 post 都路由到同一个 action 了,get 访问的时候就调用 user_params,这时候 params 是空的。应该把 get 和 post 的 action 分开。

PS:看的是什么书?

#9 楼 @rei 原书 railsspace,ruby on rails web 应用开发,可能版本的问题,并没有把 route 写出来,这个是我自己加的。我对路由的理解尚不是很深入,所以这个路由不是很清楚,首先得呈现这个页面,不就是 get 么?然后还需要把参数 post 出去。不都是这一个么?

正常来说,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

需要 登录 后方可回复, 如果你还没有账号请 注册新账号