ruby-on-rails - 当表单提交错误时,Rails 4 中呈现的 url 会发生变化

标签 ruby-on-rails forms ruby-on-rails-4 routes

我创建了一个用户注册页面。当用户错误地提交表单时,当显示验证错误时,它不会呈现在同一个 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/

相关文章:

ios - Devise with Facebook Omniauth - 如何使用 API 进行身份验证?

ruby-on-rails - Font Awesome Rails 在部署后将无法工作。它看起来像是糟糕的 Unicode 字符。为什么?

ruby-on-rails - find_or_initialize_by方法的Rails弃用警告

ruby-on-rails - 从 id 数组更新 has_many 关联

ruby-on-rails - 优化查询以获得更好的性能

ruby-on-rails - rails 4.2 : using deliver_later with a tableless model

ruby-on-rails - 使用 hstore 使用 postgres 的 Rails 测试数据库出错

javascript - 如果选项值存在则禁用选择输入

css - 根据 Angular 2 表单中分配的验证器标记必填字段的标签

forms - 如何在表单中仅加载 OneToMany 关联的子集?