2015-11-18 3 views
0

У меня есть 2 модели. Категория и размер. У меня есть вложенная форма, которая не работает.Вложенная форма базы данных заблокирована: совершить транзакцию

ПРОБЛЕМА. Когда я отправлю форму. Я получаю следующую ошибку. Кто-нибудь знает, как это исправить? Любая информация была бы замечательной. Заранее спасибо.

ActiveRecord::StatementInvalid (SQLite3::BusyException: database is locked: commit transaction): 
    app/controllers/categories_controller.rb:28:in `create' 

Category.rb

class Category < ActiveRecord::Base 
    has_ancestry 

    has_many :products 
    has_many :sizes 

    validates :name, presence: true, length: { maximum: 20 }, uniqueness: true 

    accepts_nested_attributes_for :sizes 
end 

Size.rb

class Size < ActiveRecord::Base 
    validates :title, presence: true, length: { maximum: 15 } 
    validates :title, uniqueness: true 

    belongs_to :category 
end 

Вот форма

<%= simple_form_for(@category) do |f| %> 
    <div class="form-inputs"> 
     <%= f.input :name %> 
     <%= f.collection_select :parent_id, Category.order(:name), :id, :name, {prompt: "Select Parrent ID If Applicable"},include_blank: true %> 
     <%= f.simple_fields_for :sizes do |s| %> 
      <%= s.input :title %> 
     <% end %> 
     <div class="form-actions"><%= f.button :submit %></div> 
    </div> 
    <% end %> 

Категории Контроллер

class CategoriesController < ApplicationController 

    def create 
    @category = Category.new(category_params) 
    if @category.save 
     redirect_to @category 
     flash[:success] = "You have created a new category" 
    else 
     flash[:danger] = "Your category didn't save" 
     render "new" 
    end 
    end 

    def category_params 
    binding.pry 
    params.require(:category).permit(:name, :parent_id, size_ids: [], sizes_attributes: [:title]) 
    end 
end 

Размеры контроллер

class SizesController < ApplicationController 
    before_action :logged_in_user, only: [:create, :index, :destroy, :update] 
    before_action :admin_user, only: [:create, :index, :destroy, :update] 

    def create 
    @size = Size.create(size_params) 
    end 

    def index 
    @sizes = Size.all 
    end 

    def destroy 
    Size.find(params[:id]).destroy 
    end 

    def update 
    @size.update_attributes(size_params) 
    end 

    private 

    def size_params 
    params.require(:size).permit(:title, :category_id) 
    end 
end 

ответ

1

Вы внесли некоторые изменения наружно в базе данных и din пишут те изменения, что является причиной вашей database заблокирована.

Сохраните изменения с GUI sqlite3, нажав на кнопку Write Changes. А затем запустите команду rake. Это будет работать ...!!!

+0

Спасибо за ваш ответ. Я открыл свою базу данных с помощью http://sqlitebrowser.org/, и я могу увидеть кнопку «Изменить записи», но я не могу ее щелкнуть. – joeyk16

+0

Вы загрузили «браузер БД для SQlite» на свой компьютер? –

+1

Я только что перезапустил свой компьютер. Так оно и было. – joeyk16