(沒有積分,因此沒辦法在問答頻道問問題.路過的,幫忙解答下)
我首先用的是
引用
script/generate migration create_books_and_authors
然后在編輯器中打開了對應的rb文件,代碼如下:
class CreateBooksAndAuthorsBooks 255, :null=> false
table.column :publisher_id, :integer, :null=> false
table.column :published_at, :datetime
table.column :isbn, :string, :limit=>13, :unique=> true
table.column :blurb, :text
table.column :page_count, :integer
table.column :price, :float
table.column :created_at, :timestamp
table.column :updated_at, :timestamp
end
create_table :authors_books, :id => false do |table|
table.column :author_id, :integer, :null=> false
table.column :book_id, :integer, :null=> false
end
say_with_time 'Adding foreign keys' do
execute 'ALTER TABLE authors_books ADD CONSTRAINT fk_bk_authors FOREIGN KEY (author_id) REFERENCES authors(id) ON DELETE CASCADE'
execute 'ALTER TABLE authors_books ADD CONSTRAINT fk_bk_books FOREIGN KEY (book_id) REFERENCES books(id) ON DELETE CASCADE'
execute 'ALTER TABLE books ADD CONSTRAINT fk_books_publishers FOREIGN KEY (publisher_id) REFERENCES publishers(id) ON DELETE CASCADE'
end
end
def self.down
drop_table :authors_books
drop_table :books
end
end
然后執行
引用
rake db:migrate
引用
== 3 CreateBooksAndAuthorsBooks: migrating ====================================
-- create_table(:books)
rake aborted!
SQLite3::SQLException: table books already exists: CREATE TABLE books ("id" INTE
GER PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar(255) NOT NULL, "publishe
r_id" integer NOT NULL, "published_at" datetime DEFAULT NULL, "isbn" varchar(13)
DEFAULT NULL, "blurb" text DEFAULT NULL, "page_count" integer DEFAULT NULL, "pr
ice" float DEFAULT NULL, "created_at" datetime DEFAULT NULL, "updated_at" dateti
me DEFAULT NULL)
卻發現只創建了books表,而authors_books表并未創建.
請問是否是代碼錯了,或者是其它什么原因呢?
分享到:
相关推荐
4. **SQLite3或PostgreSQL/MySQL数据库**: Rails默认使用SQLite3,但在生产环境中,通常选择PostgreSQL或MySQL。 5. **Node.js**: 用于处理JavaScript和CSS资产的编译。 6. **Yarn**: JavaScript包管理器,用于...
6. **数据库和迁移**:RoR通常与SQLite、MySQL或PostgreSQL等数据库配合使用,`db:migrate`命令执行数据库迁移,用于更新数据库结构。 7. **RESTful设计**:RoR鼓励使用REST(Representational State Transfer)...
在RoR中,我们通常使用ActiveRecord,它是Ruby的一个库,将数据库操作与对象关联起来,使得数据操作更加便捷。 2. **视图(View)**:视图负责呈现用户界面,它与模型交互,获取并展示数据。RoR使用ERB(Embedded ...
4. **ActiveRecord**: RoR中的ORM(对象关系映射)库,将数据库操作与Ruby对象关联,简化了数据库操作。 5. **路由(Routing)**: Rails的路由系统将URL映射到控制器的特定动作上,实现URL到业务逻辑的转换。 6. *...
在教程中,你可能会使用SQLite,因为它简单易用且不需要额外安装。 路由是Rails应用的“神经系统”,定义了URL到控制器动作的映射。`config/routes.rb`文件是配置路由的地方。在这里,你可以定义资源、命名路由以及...
6. **迁移(Migration)**: 在创建模型后,会自动生成迁移文件,用于数据库表的创建和修改。使用`rails db:migrate`执行迁移操作。 7. **控制器(Controller)**: 控制器处理HTTP请求,调用模型并传递数据给视图。...
4. **数据库操作**:使用SQLite或PostgreSQL等数据库,了解ActiveRecord的查询构造和关联。 5. **RESTful设计**:Rails鼓励使用REST(Representational State Transfer)原则来设计API和URL结构。 6. **Gem管理**:...
在Ruby on Rails(RoR)框架中,"ruby_todo:ruby_test"可能是一个关于创建待办事项应用(Todo List)的示例项目,用于教学目的。这个项目可能使用了Ruby编程语言以及Rails的MVC(Model-View-Controller)架构模式来...
7. **数据库**:RoR默认使用SQLite,但也可以配置为使用其他数据库如MySQL或PostgreSQL。在`db/schema.rb`文件中,可以查看数据库的结构。 8. **ActiveRecord**:RoR的ORM(Object-Relational Mapping)工具,允许...
在Ruby社区中,"prueba"是西班牙语中的"测试",所以这可能是一个开发者创建的用于尝试和学习Ruby on Rails(RoR)框架的博客应用。 Ruby是一种面向对象的、动态类型的编程语言,以其简洁、优雅的语法和强大的元编程...
在Windows平台上将Ruby on Rails(RoR)应用于生产环境可能会比在Unix-like系统上遇到更多的挑战,但并非不可能。这篇文章将引导新手Web程序员和对RoR感兴趣的开发者如何在Windows上搭建并部署一个稳定的生产环境。 ...
这可能需要用到数据库,如SQLite(本地开发)或Heroku推荐的PostgreSQL服务。 10. **邮件服务API**: 可能会使用第三方邮件服务(如SendGrid、Mailgun或AWS SES)的API来发送邮件,这些服务提供了可靠的邮件传递和...
尽管RoR通常与Unix-like系统如Linux或Mac OS X关联,但通过使用如RubyInstaller这样的工具,开发者也可以在Windows上搭建完整的Ruby和Rails开发环境。 这个压缩包可能包含以下内容: 1. **Gemfile**: 这是Rails...