我创建了一个用户注册页面。当用户错误地提交表单时,当显示验证错误时,它不会呈现在同一个 URL 上。
注册表单位于此网址:
http://localhost:3000/signup
我为注册页面添加了以下路由:
resources :users
match '/signup', to: 'users#new', via: 'get'
当我提交表单时,会显示模型验证,但 url 会重定向到:
http://localhost:3000/users
我希望用户在提交表单后保持相同的 url。
http://localhost:3000/signup
这是我的 Controller 代码:
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
这是我的表单的开始标签:
<%= form_for @user, url: {action: "create"} do |f| %>
最佳答案
我正在使用 Rails 5,但我怀疑它在概念上并没有太大的不同。
在 routes.rb 中:
get 'signup', to: 'users#new'
post 'signup', to: 'users#create'
resources :users
并在您的表单助手中:
<%= form_for @user, url: signup_path do |f| %>
从本质上讲,它无法按照原始帖子中的描述工作的原因是,当表单发布( rails 4.2 form helpers )时,它与
url: {action: "create"}
相关联。 ,默认情况下,根据为resources :users
自动生成的路由, 是 post '/users', to: 'users#create
(rails 4.2 routing guide)。通过在 routes.rb 中自上而下搜索,它会首先看到这个,你最终会得到 http://localhost:3000/users
.因此,我建议的更改应该将表单绑定(bind)到注册路径,而不是在 routes.rb 中被视为第二个路由条目。
关于ruby-on-rails - 当表单提交错误时,Rails 4 中呈现的 url 会发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23660321/