我试图通过表单显示用户的数据,这样他就可以编辑任何字段。为此,我使用simple_form,并设计用于身份验证。我一直收到undefined method user_path
错误。
这是我的控制器
class HomeController < ApplicationController
before_filter :authenticate_user!
def index
#Mostramos menu de opciones
end
def perfil
@user = User.find(current_user.id)
end
def editar
@user = User.find(current_user.id)
end
结束
perfil.html.erb 的视图
<h1>showing user data</h1>
<%= simple_form_for @user do |f| %>
<%= f.input :nombre %>
<%= f.input :username %>
<%= f.input :rut %>
<%= f.input :ciudad %>
<%= f.input :direccion %>
<%= f.input :groupId %>
<%= f.button :submit %>
<% end %>
<%= link_to "Editar datos", :action => :editar %>
<br>
<%= link_to "Volver", :action => :index %>
我的路线文件
devise_for :users
match "perfil" => "home#perfil"
match "editar" => "home#editar"
错误位于视图<%= simple_form_for @user do |f| %>
中的这条线附近我一直在寻找关于我做错了什么的指南或见解(我几乎可以肯定是routes.rb中做得不好或遗漏了什么)。任何见解都将不胜感激。
<%= simple_form_for @user do |f| %>
这将发布到users_controller
控制器的表单中,并根据上下文执行操作。devise_for :users
不会为您生成该控制器,相反,您有registrations_controller
可用,事实上,您不需要创建编辑表单,在url users/edit
中已经有一个可用于当前用户。
要自定义默认模板,请运行rails generate devise:views
并查看app/views/devise
。
按照以下方式更改路线并尝试,
devise_for :users
match "perfil" => "home#perfil", :as => :user
match "editar" => "home#editar", :as => :user
:as
参数告诉路由器将路由命名为什么(然后可以将_path
或_url
添加到:as
参数中)。
此外,任何时候直接链接到ActiveRecord模型(例如link_to user.email, user
),它都会尝试将user
转换为user_path
。
如果@user是现有用户,则
<%= simple_form_for @user do |f| %>
使用PUT/PATCH http请求类型将表单发布到user_path(@user)。请注意,您需要创建此路由。从你的代码中还不清楚这个更新操作在哪里,但如果你使用了一个足智多谋的模式,那么:
resources :users
处理它(通过UsersController#edit
路由),包括您的perfil
和editar
操作。顺便说一句,他们看起来也一样:打开一个页面提交配置文件更改,通常通过UsersController#edit
进行路由。