【问题标题】:Why am I getting a "Could not find table 'users'" error?为什么我收到“找不到表‘用户’”错误?
【发布时间】:2011-08-31 07:31:30
【问题描述】:

我对 Rails 比较陌生,每次测试登录页面时都会遇到上述错误。 这是测试视图文件:

<%= form_for :user, :url => create_path do |f| %>
  <p> Email: <br />  <%= f.text_field :email %></p>
  <p> Password: <br />  <%= f.password_field :password %></p>
  <p><%= submit_tag "Sign In", :disable_with => "Please wait...", :class => "btn primary" %></p>
<% end %>

这是用户控制器:

class UsersController < ApplicationController   
  before_filter :get_user, :except => [:register, :login, :create]
  before_filter :user_signed_in?, :only => [:delete]

  def create
    if user = User.find_by_email(params[:user][:email]).try(:authenticate, params[:user][:password])
      session[:user_id] = user.id
      redirect_to root_path # Or whatever you want i.e. redirect_to user
    else
      render :new, :flash => { :error => "Bad email/password combination" }
    end
  end

  def delete
    session.delete(:user_id)
  end

  def register
    if Invite.find_by_hash(params[:hash]).blank?
      redirect_to root_path
      return
    end
    @user = User.new(params[:user])
    if(request.post? and @user.save)
      flash[:notice] = "Account Created Successfully"
      redirect_to root_path      
      return
    else
      flash.now[:warning] = @user.errors.full_messages
    end
  end

  def destroy
    @user = User.find(params[:id])
    @user.destroy
    redirect_to root_path
  end

  def login

  end

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

end

还有我的用户模型:

class User < ActiveRecord::Base
  has_secure_password
  validates :email, :presence => true, :uniqueness => true, :length => {:minimum => 6}
  validates_format_of :email, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
  validates :name, :presence => true, :length => {:maximum => 32}
  validates :password, :presence => true, :length => {:minimum => 8}
  validates :username, :presence => true, :length => {:maximum => 20}, :uniqueness => true
  validates :blog, :uniqueness => true
  has_many :posts
end

我得到的确切错误是:

ActiveRecord::StatementInvalid in UsersController#create
Could not find table 'users'

P.S.:我正在运行 Rails 3.1.0.rc8。任何帮助,将不胜感激。谢谢。

更新:我似乎找不到任何表。我刚刚升级到 Rails 3.1,在那之前一切都很好。

【问题讨论】:

  • 你是否在应用根目录下运行过 rake db:migrate 命令?
  • 是的,我有,但没用。

标签: mysql ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1


【解决方案1】:

如果您刚刚升级到 Rails 3.1 并且在升级之前一切正常,请检查您的 database.yml 配置。我怀疑配置是否因为升级而回到默认值。

如果没有,请遵循 Rajkamal 的建议并确保运行迁移。

【讨论】:

  • 我刚刚检查了我的 database.yml 文件,一切都和以前完全一样。难道是我用的是mysql而不是mysql2?
  • Yes.. 检查你的 Gemfile,如果你已经安装了 mysql2 gem,适配器应该是 mysql2
  • 我刚刚在 Gemfile 和 database.yml 文件中将 mysql 更改为 mysql 2,并且在运行“bundle install”时,我在安装 mysql2 时出错:Installing mysql2 (0.3.7) with native extensions C:/Ruby192/lib/ruby/site_ruby/1 .9.1/rubygems/installer.rb:552:in rescue in block in build_extensions: ERROR: Failed to build gem native extension. (Gem::Installer::ExtensionBuildError) 我永远无法在 Windows 上安装 mysql2。也许你能帮忙?
  • 运行时需要指定一些参数:gem install mysql2.
  • 请添加您如何解决创建问题的解决方案,以便其他人在遇到相同问题时可以参考您的问题。当您在 CMD 中运行 rails dbconsole 并键入 show tables; 时,您是否看到它找不到的表?通过rake db:migrate 确保您的迁移也是最新的
猜你喜欢
  • 2021-09-26
  • 1970-01-01
  • 2015-09-06
  • 1970-01-01
  • 2019-09-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-24
  • 1970-01-01
相关资源
最近更新 更多