0

我正在尝试通过表单显示来自用户的数据,以便他能够编辑任何字段。我为此使用 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 中做错了什么或遗漏了一些事情)。任何见解将不胜感激。

4

3 回答 3

1

如果@user 是现有用户,则

<%= simple_form_for @user do |f| %>

使用 PUT/PATCH http 请求类型将表单发布到 user_path(@user)。请注意,您需要创建此路由。从您的代码中不清楚此更新操作在哪里,但是如果您使用了资源丰富的模式,那么:

resources :users

处理它(通过 路由UsersController#edit),包括您的perfileditar操作。顺便说一句,他们看起来也一样:打开一个页面来提交配置文件更改,通常通过UsersController#edit.

于 2013-02-11T16:45:27.977 回答
1

更改您的路线如下并尝试,

    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.

于 2013-02-11T16:24:58.927 回答
1
<%= simple_form_for @user do |f| %>

users_controller这将根据上下文将表单发布到控制器和操作。devise_for :users不会为您生成该控制器,而是您有registrations_controller可用的,事实上,您不需要创建编辑表单,users/edit当前用户的 url 已经有一个可用的。

要自定义默认模板,rails generate devise:views请运行并查看app/views/devise.

于 2013-02-11T16:30:00.010 回答