【发布时间】:2013-12-27 17:34:47
【问题描述】:
我是 Rails 新手。我正在关注 Michael Hartl 的 railstutorial 书。在第 9 章中,当我尝试编辑用户配置文件时,它不起作用。 /user/4/edit 呈现编辑页面 但是,当我单击应该呈现编辑页面的用户配置文件中的设置时,它会被路由到 /user//edit 并显示以下错误:
ActiveRecord::RecordNotFound in UsersController#show 找不到 id=edit 的用户
我知道这将是一个小错误,但我无法弄清楚。所以提前感谢您的帮助。
这是我的文件
users_controller.rb
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
end
def new
@user=User.new
end
def create
@user = User.new(params[:user])
if @user.save
sign_in @user
flash[:success] = "Welcome!"
redirect_to @user
else
render 'new'
end
end
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
if @user.update_attributes(params[:user])
flash[:success] = "Profile updated"
sign_in @user
redirect_to @user
else
render 'edit'
end
end
end
_header.html.erb
<header class="navbar navbar-fixed-top navbar-inverse">
<div class="navbar-inner">
<div class="container">
<%= link_to "project",root_path, id: "logo" %>
<nav>
<ul class="nav pull-right">
<li><%= link_to "Home", root_path %></li>
<li><%= link_to "Help", help_path %></li>
<% if signed_in? %>
<li><%= link_to "Users", '#' %></li>
<li id="fat-menu" class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
Account <b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><%= link_to "Profile", user_path(current_user) %></li>
<li><%= link_to "Settings", edit_user_path(@current_user) %></li>
<li class="divider"></li>
<li>
<%= link_to "Sign out", signout_path, method: "delete" %>
</li>
</ul>
</li>
<% else %>
<li><%= link_to "Sign in", signin_path%></li>
<% end %>
</ul>
</nav>
</div>
</div>
</header>
sessions_helper.rb
module SessionsHelper
def sign_in(user)
cookies.permanent[:remember_token] = user.remember_token
self.current_user = user
end
def signed_in?
!current_user.nil?
end
def current_user=(user)
@current_user = user
end
def current_user
@current_user ||= User.find_by_remember_token(cookies[:remember_token])
end
def sign_out
self.current_user = nil
cookies.delete(:remember_token)
end
end
edit.html.erb
<% provide(:title,'Edit user') %>
<h1>Update your profile</h1>
<div class="row">
<div class="span6 offset3">
<%= form_for (@user) do |f| %>
<%= render 'shared/error_messages' %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.label :email %>
<%= f.text_field :email %>
<%= f.label :password %>
<%= f.password_field :password %>
<%= f.label :password_confirmation, "Confirm password" %>
<%= f.password_field :password_confirmation %>
<%= f.submit "Save changes", class: "btn btn-large btn-primary" %>
<% end %>
<%= gravatar_for @user %>
<a href="http://gravatar.com/emails" target="_blank"> Change </a>
</div>
</div>
routes.rb
SampleApp::Application.routes.draw do
resources :users
resources :sessions, only: [:new, :create, :destroy]
root to: 'static_pages#home'
match '/signup', to: 'users#new', via: [:get, :post]
match '/signin', to: 'sessions#new', via: [:get]
match '/signout', to: 'sessions#destroy', via: [:delete]
match '/help', to: 'static_pages#help', via: [:get, :post]
match '/contact', to: 'static_pages#contact', via: [:get, :post]
match '/about', to: 'static_pages#about', via: [:get, :post]
end
sessions_controller.rb
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by_email(params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
sign_in user
redirect_to user
else
flash.now[:error] = "Invalid email/password combination"
render 'new'
end
end
def destroy
sign_out
redirect_to root_path
end
end
【问题讨论】:
-
您能否将收到的参数放入编辑操作中
-
另外,查看您的日志以查看原始参数。例如:
Processing SearchesController#index (for 127.0.0.1 at 2013-12-27 09:56:35) [GET] Parameters: {"search"=>{"query"=>"yo"}} -
在错误中,参数显示为 {"id" => "edit"}。这是在编辑操作中接收的参数吗?
标签: ruby-on-rails