Pergunta

After adding new column events_count to table users, I get this error:

SQLite3::SQLException: no such column: events_count: UPDATE "users" SET "events_count" = COALESCE("events_count", 0) + 1 WHERE "users"."id" = 2

This is extracted source with a line with bug:

@event.user_id = current_user.id
respond_to do |format|
  **if @event.save**
    format.html { redirect_to @event, notice: 'Event was successfully created.' }
    format.json { render :show, status: :created, location: @event }
  else

This is my users table:

create_table "users", force: true do |t|
  .
  .
  .
  .
  t.integer  "events_count",           default: 0
end

This is html with ranking from users_path:

<tr>
  <% User.all.each  do |user| %> 
    <td> <%= user.name %></td>
    <td> <%= user.events_count %></br></td> 
  <% end %>
</tr>

This is Event model:

class Event < ActiveRecord::Base
  acts_as_commontable
  mount_uploader :picture, PictureUploader
  acts_as_votable
  belongs_to :user, dependent: :destroy,counter_cache: true
end

Anyone know what may be wrong?

EDIT:

This is migration file:

class AddEventsCountToUsers < ActiveRecord::Migration
  def change
    add_column :users, :events_count, :integer, :default => 0
  end
end

This is Event controller:

# POST /events
  # POST /events.json
  def create
    @event = Event.new(event_params)
    @event.user_id = current_user.id 
    respond_to do |format|
      if @event.save
        format.html { redirect_to @event, notice: 'Event was successfully created.' }
        format.json { render :show, status: :created, location: @event }
      else
        format.html { render :new }
        format.json { render json: @event.errors, status: :unprocessable_entity }
      end
    end
  end
# Never trust parameters from the scary internet, only allow the white list through.
    def event_params
      params.require(:event).permit(:title, :description, :picture, :start_date, :start_time, :end_time, :location, :user_id, :city)
    end
end
Foi útil?

Solução

Seems like you just added event_counts instead of events_count that to an already existing create_users.rb migration file.

you have to perform a query which generates a migration file for an extra column events_count

rails g migration AddEventsCountToUsers events_count:integer

Do rake db:migrate after that

OR

Do rake db:rollback,add that column in the create_users.rb migration file and do rake db:migrate

As mentioned in the comments,try running rake db:migrate:up VERSION=20140511122817

Outras dicas

Edit user table as:

create_table "users", force: true do |t|
.
.
.
.
 t.integer  :events_count, default: 0
end 

And run these commands:-

rake db:drop
rake db:create
rake db:migrate

Note :- It will delete all data from your datasase

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top