2012-05-24 3 views
1

После повторной проверки кода, перезагрузки компьютера и запуска rake db: migrate, я не уверен, что еще с этим делать. Я продолжаю получать следующую ошибку:Rails, SQLException: no такой столбец

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+\-.][email protected][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 
+0

Вы добавили user_id в миграцию после того, как вы уже запустили один раз? –

+0

да, я. Любые другие мысли? – user1341808

ответ

3

После того, как миграция выполняется, рельсы не будет перезапускать его, если вы обновите его (он не знает, какие изменения сделал).

Перед тем, как отредактировать его или скопируйте обратно (rake db: rollback), либо создайте новую миграцию, которая добавит дополнительные столбцы.

+0

А, это сработало ... Я понял это сейчас. Спасибо! – user1341808

0

Миграции могут произойти с ошибкой, если у вас есть некоторые ошибки, например, это не сработает. Убедитесь, что он запущен, и вы можете проверить свою базу данных sqlite, чтобы увидеть, есть ли файл user_id или нет.

Смежные вопросы