2012-07-02 44 views
0

我只是章-7在7.3.2名称和的Gravatar舞台on Rails的3个教程(Mhartl)下面的Ruby。的ActiveRecord :: RecordNotFound在UsersController#显示

在这里,我面临的一个问题,当我在我的浏览器,它是开放的说:

ActiveRecord::RecordNotFound in UsersController#show 
Couldn't find User with id=1 
Rails.root: C:/RubyOnRails/MyWorkPlace/sample_app_1 
Application Trace | Framework Trace | Full Trace 
app/controllers/users_controller.rb:5:in `show' 
Request 
Parameters: 
{"id"=>"1"} 
Show session dump 
Show env dump 
Response 
Headers: 
None 

而且我粘贴下面User_controller.rb和user.rb

user.rb:

require 'digest' 

class User < ActiveRecord::Base 

    attr_accessor :pasword 
    attr_accessible :login, 
        :username, 
        :email, 
        :password, 
        :password_confirmation, 
        :remember_me 

    email_regex = /\A[\w+\-.][email protected][a-z\-.]+\.[a-z]+\z/i 

    validates :name, :presence => true, 
        :length => { :maximum => 50 } 


    validates :email, :presence => true, 
         :format => { :with => email_regex }, 
         :uniqueness => { :case_sensitive => false } 

    validates :pasword, :presence  => true, 
         :confirmation => true, 
         :length  => { :within => 6..40 } 

    def self.authenticate(email, submitted_password) 
     user = find_by_email(email) 
     return nil if user.nil? 
     return user if user.has_password?(submitted_password) 
    end 

    before_save :encrypt_password 

    def has_password?(submitted_password) 
     encrypted_password == encrypt(submitted_password) 
    end 

    private 

    def encrypt_password 
     self.salt = make_salt if new_record? 
     self.encrypted_password = encrypt(password) 
    end 

    def encrypt(string) 
     secure_hash("#{salt}--#{string}") 
    end 

    def make_salt 
     secure_hash("#{Time.now.utc}--#{password}") 
    end 

    def secure_hash(string) 
     Digest::SHA2.hexdigest(string) 
    end      

end 

users_controller.rb:

class UsersController < ApplicationController 

    def show 
     @user = User.find(params[:id]) 
     @title = @user.name 
    end 

    def new 
     @title = "Sign up" 
    end 
end 

回答

1

您确定您创建了id = 1的任何用户吗? 要检查,请转到rails控制台并使用id为1的用户。如果没有用户,请创建一个。

+0

非常感谢你为你的快速回复Aniruth,我只是检查有没有用户ID是说,(找不到用户使用id = 1) – Dennis

+0

我试过让新的使用身份证,但!!!! ActiveModel :: MassAssignmentSecurity :: Error:无法批量分配受保护的属性:名称 from c:/RubyOnRails/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activemodel-3.2.3/lib/active_model /mass_assignment_security/sanitizer.rb:48:in'process_removed_attri butes' from c:/RubyOnRails/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activemodel-3.2.3/lib/active_model/mass_assignment_security/ sanitizer.rb:20:在'debug_protected_attri bute_removal' – Dennis

+0

打开控制台并键入:'@user = User.new,@ user.name =“Name you want”等等,@ user.save'这应该保存一个用户id = 1。你不能指定id,因为它的一个受保护的属性由rails自动处理。 – Vikko

0

在firest,我看你有没有attr_accessor:pasword

我觉得应该是:密码

Ontopic:

有一些动作在宁静的控制器丢失,所以它不会是可能的创建一个用户。 有关RESTful控制器的更多详细信息,请参阅http://guides.rubyonrails.org/getting_started.html#rest

class UsersController < ApplicationController 


    def show 
    @user = User.find(params[:id]) 
    @title = @user.name 
    end 

    def new 
    @user = User.new #this creates a empty user object to be filled with signup data 
    @title = "Sign up" 
    end 

    def create 
    @user = User.new(params[:user]) #this creates a new user object with the data you entered before. 
    if @user.save #if the data is valid, save it 
     redirect_to user_path(@user) #and go to the @user show action 
    else 
     render :action => :new #edit the invalid user data 
    end 
    end 

    def edit 
    @user = User.find(params[:id]) 
    end 

    def update 
    @user = User.find(params[:id]) 
    if @user.update_attributes(params[:user]) 
     redirect_to user_url(@user) 
    else 
     render edit_user_url(@user) 
    end 
    end 

    def index 
    @users = User.all 
    end 

    def destroy 
    @user = User.find(params[:id] 
    @user.destroy 
    redirect_to :action => :index 
    end 

end 

编辑:完整的宁静行动

+0

我纠正了拼写错误,谢谢Vikko。 – Dennis

+0

'validates:pasword,:presence => true,'另一个错字! – Vikko

0

我有同样的problema。在我的情况下,我的销毁行动中的'redirect_to'错过了'posts_path'中的's'。这是post_path Noob,但值得我检查。

0

你找不到原因“用户/ 1”是当你键入

users = User.order(:created_at).take(6) 
50.times do 
    content = Faker::Lorem.sentence(5) 
    users.each { |user| user.microposts.create!(content: content) } 
end 

加微柱的样本数据(DB/seeds.rb)你忘了“END”以前的代码,所以数据库的全貌/ seeds.rb是

User.create!(name: "Example User", 
     email: "[email protected]", 
     password:    "foobar", 
     password_confirmation: "foobar", 
     admin:  true, 
     activated: true, 
     activated_at: Time.zone.now) 

99.times do |n| 
    name = Faker::Name.name 
    email = "example-#{n+1}@railstutorial.org" 
    password = "password" 
    User.create!(name: name, 
      email: email, 
      password:    password, 
      password_confirmation: password, 
      activated: true, 
      activated_at: Time.zone.now) 
end 

users = User.order(:created_at).take(6) 
50.times do 
    content = Faker::Lorem.sentence(5) 
    users.each { |user| user.microposts.create!(content: content) } 
end 
相关问题