Rails形成调用错误的方法

时间:2016-05-08 13:18:45

标签: ruby-on-rails devise haml

我是rails的新手,我使用bootstrap简单表单来更新用户的信息,但它一直在调用错误的控制器。

表单代码:

simple_form_for(@user) do |f|
= f.input :forename
= f.input :surname
.form-actions
  = f.button :submit, :method => :update

控制器中的代码:

def update
  if @user.update(user_params)
    redirect_to home_path
  else
    redirect_to wrong_path
end

路线中的代码:

resources :user do
  member do
    post :update
  end
end

但是在另一个页面中,我在另一个名为AdminController的控制器中再次使用该表单,update表单调用AdminController而不是UserController

我需要什么来调用正确的控制器/

1 个答案:

答案 0 :(得分:2)

错误不是形式,而是缺乏对rails中RESTful路由如何工作的理解。

在rails约定中,您通过发送PATCH请求来更新记录。

resources :users

事实上,当你申报路线时:

UsersController

Rails为您创建该路线。请注意,名称应为复数!这同样适用于控制器UserController而非# sugar on top of form_for simple_form_for(@user) do |f|

创建表单并传递如下资源时:

<form>

Rails将查看记录并尝试根据约定查找相应的路径。您不需要指定方法,因为Rails查看模型是否已被持久化。

如果由于某些原因确实需要指定HTTP方法,则需要在simple_form_for(@user, method: :patch) do |f| 元素上执行 - 而不是在提交按钮上。

def update
  if @user.update(user_params)
    redirect_to home_path
  else
    render :edit
  end
end

此外,处理更新路线的传统方法是:

{{1}}

您不希望在提交失败的表单后重定向 - 用户将丢失输入到表单中的任何数据。而是你想重新渲染表格。