Я новичок в Rails и начал работать над «Agile Web Development с Rails: четвертое издание».Я в настоящее время в главе Создание корзины.Я в основном скопировал код из книги, однако моя база данных называется «dvds» вместо «products» (потому что я создаю DVD Store для проекта).
Я достиг конца главы, и когда я запускаю функциональные тесты, я получаю следующую ошибку:
test_should_destroy_dvd(DvdsControllerTest):
ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: line_items.dvd_id: SELECT COUNT(*) FROM "line_items" WHERE ("line_items".dvd_id = 980190962)
app/models/dvd.rb:26:in `ensure_not_referenced_by_any_line_item'
app/controllers/dvds_controller.rb:76:in `destroy'
test/functional/dvds_controller_test.rb:50:in `test_should_destroy_dvd'
test/functional/dvds_controller_test.rb:49:in `test_should_destroy_dvd'
Вот код из файла dvd.rb, которыйэто ссылка:
has_many :line_items
before_destroy :ensure_not_referenced_by_any_line_item
...
private
def ensure_not_referenced_by_any_line_item
if line_items.empty?
return true
else
errors.add(:base, 'Line Items present')
return false
end
end
код из dvds_controller.rb:
def destroy
@dvd = Dvd.find(params[:id])
@dvd.destroy
respond_to do |format|
format.html { redirect_to(dvds_url) }
format.xml { head :ok }
end
end
и код из dvds_controller_test.rb:
test "should destroy dvd" do
assert_difference('Dvd.count', -1) do
delete :destroy, :id => @dvd.to_param
end
assert_redirected_to dvds_path
end
По сути, яЯ не понимаю ошибку, и я ищу помощь, чтобы она ушла!Я предполагаю, что проблема с "нет такого столбца: line_items.dvd_id", но я не знаю, как это исправить.Я растопил свой мозг, пытаясь это выяснить, поэтому любая помощь будет весьма признательна.
Редактировать: Кажется, в этом и заключается проблема, в create_line_items.rb:
class CreateLineItems < ActiveRecord::Migration
def self.up
create_table :line_items do |t|
t.integer :product_id
t.integer :cart_id
t.timestamps
end
end
def self.down
drop_table :line_items
end
end
Также вот схема:
ActiveRecord::Schema.define(:version => 20111125123848) do
create_table "carts", :force => true do |t|
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "dvds", :force => true do |t|
t.string "title"
t.text "description"
t.string "image_url"
t.decimal "price", :precision => 8, :scale => 2
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "line_items", :force => true do |t|
t.integer "product_id"
t.integer "cart_id"
t.datetime "created_at"
t.datetime "updated_at"
end
end