ruby-on-rails - Rails,SQLException:没有这样的列

标签 ruby-on-rails sqlite

重新检查代码,重新启动计算机并运行rake db:migrate之后,我不确定该怎么做。我不断收到以下错误:

SQLite3::SQLException: no such column: uploads.user_id: SELECT COUNT(*) FROM "uploads"  WHERE "uploads"."user_id" = 1

Extracted source (around line #12):

9:     </section>
10:   </aside>
11:   <div class="span8">
12:     <% if @user.uploads.any? %>
13:       <h3>Uploads (<%= @user.uploads.count %>)</h3>
14:       <ol class="uploads">
15:         <%= render @uploads %>


这与has_many关联有什么关系吗?

show.html.erb

<% provide(:title, @user.name) %>
<div class="row">
<aside class="span4">
<section>
  <h1>
    <%= gravatar_for @user %>
    <%= @user.name %>
  </h1>
</section>
</aside>
<div class="span8">
<% if @user.uploads.any? %>
  <h3>Uploads (<%= @user.uploads.count %>)</h3>
  <ol class="uploads">
    <%= render @uploads %>
  </ol>
  <%= will_paginate @uploads %>
<% end %>
</div>
</div>


upload.rb

class Upload < ActiveRecord::Base
attr_accessible :title

belongs_to :user

validates :title, presence: true
validates :user_id, presence: true

default_scope order: 'uploads.created_at DESC'
end


user.rb

class User < ActiveRecord::Base
attr_accessible :name, :email, :password, :password_confirmation
has_secure_password
has_many :uploads, dependent: :destroy

before_save { |user| user.email = email.downcase }
before_save :create_remember_token

validates :name, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence:   true,
                format:     { with: VALID_EMAIL_REGEX },
                uniqueness: { case_sensitive: false }
validates :password, length: { minimum: 6 }
validates :password_confirmation, presence: true

private

def create_remember_token
  self.remember_token = SecureRandom.urlsafe_base64
end
end


来自users_controller.rb

  def show
  @user = User.find(params[:id])
  @uploads = @user.uploads.paginate(page: params[:page])
  end


20120524145724_create_uploads.rb

class CreateUploads < ActiveRecord::Migration
def self.up
create_table :uploads do |t|
  t.string :title
  t.integer :user_id

  t.timestamps
  end
  add_index :uploads, [:user_id, :created_at]
end

def self.down
drop_table :uploads
end
end

最佳答案

运行迁移后,如果您对其进行更新,Rails将不会重新运行它(它不知道您做了什么更改)。

在编辑迁移之前回滚迁移(rake db:rollback),或者创建一个添加了额外列的新迁移。

关于ruby-on-rails - Rails,SQLException:没有这样的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10745671/

相关文章:

android - SQLite:删除大量行的有效方法

python - 在一个线程中创建的对象只能在同一个线程中使用

sqlite - 计算表中列相同的列数,然后从另一个表中的列中减去

sqlite - 自定义数据类型如何在SQLite中工作

ruby-on-rails - 如何设置rails gem 'rich'上传文件大小?

ruby-on-rails - 类="with equal sign in front"和类:"with Colon"的区别

ruby-on-rails - 安装 sqlite3 gem rvm openssl 权限被拒绝时出错

javascript - Ruby on Rails 中的 morris.js 错误

c++ - 如何确保 SqLite 中的只读事务?

ruby-on-rails - 为什么 Rails 在 URL 的查询字符串前放置一个句点(点)而不是问号?