Jas*_*ran 5 forms routes ruby-on-rails ruby-on-rails-4
我已经创建了一个用户注册页面。当用户错误地提交表单时,显示验证错误时,它不会在同一URL上呈现。
注册表单位于以下网址:
http://localhost:3000/signup
Run Code Online (Sandbox Code Playgroud)
我为注册页面添加了以下路线:
resources :users
match '/signup', to: 'users#new', via: 'get'
Run Code Online (Sandbox Code Playgroud)
当我提交表单时,将显示模型验证,但URL重定向到:
http://localhost:3000/users
Run Code Online (Sandbox Code Playgroud)
我希望用户在提交表单后保留在相同的URL。
http://localhost:3000/signup
Run Code Online (Sandbox Code Playgroud)
这是我的控制器代码:
def new
@user = User.new
end
def create
@user = User.new(user_params) # Not the final implementation!
if @user.save
# Handle a successful save.
else
render 'new'
end
end
Run Code Online (Sandbox Code Playgroud)
这是我表格的开始标记:
<%= form_for @user, url: {action: "create"} do |f| %>
Run Code Online (Sandbox Code Playgroud)
我正在使用 Rails 5,但我怀疑它在概念上并没有太大不同。
在routes.rb中:
get 'signup', to: 'users#new'
post 'signup', to: 'users#create'
resources :users
Run Code Online (Sandbox Code Playgroud)
并在您的表单助手中:
<%= form_for @user, url: signup_path do |f| %>
Run Code Online (Sandbox Code Playgroud)
本质上,它不能按照原始帖子中所述工作的原因是因为当表单发布(rails 4.2 form helpers)时,它绑定到url: {action: "create"},默认情况下,根据自动生成的路由resources :users,是post '/users', to: 'users#create(rails 4.2路由指南) 。通过在routes.rb中自上而下搜索,它会首先看到这个,最后得到http://localhost:3000/users.
因此,我建议的更改应该将表单绑定到注册路径,而不是在 paths.rb 中将其视为第二个路由条目。