Ruby/Rails: не удается заставить контроллер вставить новое значение в БД

Я новичок в Ruby и Ruby on Rails.

Я делаю пример приложения (без использования строительных лесов), чтобы вставить строку в таблицу. Таблица имеет 2 столбца: «имя» и «описание» (вместе с 3 магическими столбцами).

На мой взгляд, у меня есть что-то вроде этого:

<h1>New Location</h1>
    <%= form_for(@location) do |l| %>
    <div class="field">
        <%= l.label :name %><br />
        <%= l.text_field :name %>
    </div>
    <div class="field">
        <%= l.label :description %><br />
        <%= l.text_field :description %>
    </div>
    <div class="actions">
         <%= l.submit "Add" %>
    </div>

И контроллер:

class LocationsController < ApplicationController
    def new
        @location = Location.new
    end

    def create
            @location = Location.new(params[:location])
            @location.save #fails on this line
            redirect_to @location
    end
end

Код модели:

class Location < ActiveRecord::Base
    attr_accessible :name, :description
    has_many :foods
end

Вот что выводит консоль:

Started POST "/locations" for 127.0.0.1 at Wed Jan 25 17:09:22 -0500 2012
Processing by LocationsController#create as HTML
Parameters: {"commit"=>"Add", "location"=>{"name"=>"name", "description"=>"description"}, "authenticity_token"=>"7rT1/3qSn/Kz1cGg8iTFCKbkO0W/L7ETT+lNcSSN6FI=", "utf8"=>"\342\234\223"} (0.1ms)  begin transaction
SQL (5081.3ms)  INSERT INTO "locations" ("created_at", "description", "name", "updated_at") VALUES (?, ?, ?, ?)  [["created_at", Wed, 25 Jan 2012 22:09:22 UTC +00:00], ["description", "description"], ["name", "name"], ["updated_at", Wed, 25 Jan 2012 22:09:22 UTC +00:00]]
SQLite3::BusyException: database is locked: INSERT INTO "locations" ("created_at", "description", "name", "updated_at") VALUES (?, ?, ?, ?)
(0.2ms)  rollback transaction
SQLite3::BusyException: cannot rollback transaction - SQL statements in progress: rollback transaction 
Completed 500 Internal Server Error in 5084ms

ActiveRecord::StatementInvalid (SQLite3::BusyException: cannot rollback transaction - SQL statements in progress: rollback transaction): app/controllers/locations_controller.rb:8:in `create'

Rendered /Library/Ruby/Gems/1.8/gems/actionpack 3.2.0/lib/action_dispatch/middleware/templates/rescues/_trace.erb (0.8ms)
Rendered /Library/Ruby/Gems/1.8/gems/actionpack 3.2.0/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (0.8ms)
Rendered /Library/Ruby/Gems/1.8/gems/actionpack 3.2.0/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (3.9ms)

tl;dr: вызов .save завершается с ошибкой и возвращает SQLite3::SQLException: невозможно начать транзакцию внутри транзакции: начать транзакцию


person snguyen    schedule 25.01.2012    source источник
comment
Пожалуйста, добавьте полную трассировку стека, если можете. На первый взгляд код выглядит так, как будто он должен работать, поэтому было бы полезно больше контекста для ошибки.   -  person Emily    schedule 26.01.2012
comment
также добавьте код модели Location   -  person klochner    schedule 26.01.2012
comment
Трассировка приложения: app/controllers/locations_controller.rb:8:in `create'   -  person snguyen    schedule 26.01.2012
comment
@‹JesseWolgamott› да. таблицы существуют   -  person snguyen    schedule 26.01.2012
comment
Вы уверены, что нет других запущенных процессов, которые могут использовать базу данных? (Я спрашиваю из-за ошибки «SQLite3:: BusyException: база данных заблокирована»)   -  person SuperMaximo93    schedule 26.01.2012
comment
@SuperMaximo93 сделал это! у меня был браузер базы данных sqlite, работающий в фоновом режиме, поэтому я могу видеть свои данные, когда я их вставляю. Благодарность! :D   -  person snguyen    schedule 26.01.2012
comment
Круто :) Опубликовал это как ответ   -  person SuperMaximo93    schedule 26.01.2012
comment
Я не могу проголосовать за вас, потому что у меня нет 15 очков репутации :(   -  person snguyen    schedule 26.01.2012


Ответы (1)


Эта ошибка выдает его:

SQLite3::BusyException: database is locked

Возможно, в то же время запущен другой процесс, который использует базу данных.

person SuperMaximo93    schedule 25.01.2012