我正在开发一个已部署到某些测试和登台系统以及各种开发人员工作站的应用程序.我需要添加一些额外的参考数据,但我不知道如何添加它.
大多数建议说使用seed.rb,但我的理解是,这只在应用程序初始部署时运行一次.由于我们不想重建测试和暂存数据库,以便我们可以添加1行参考数据,是否有另一种方法来添加数据?
我正在考虑使用db迁移,这是正确的方法吗?
谢谢
我收到一个错误:
SQLite3::SQLException: no such column: ideas.list_id:
SELECT "ideas".* FROM "ideas"
WHERE "ideas"."list_id" = 2
Run Code Online (Sandbox Code Playgroud)
但我补充道
t.integer :list_id
到我的数据库迁移文件:
class CreateIdeas < ActiveRecord::Migration
def change
create_table :ideas do |t|
t.string :name
t.text :description
t.string :picture
t.timestamps
end
add_foreign_key :ideas, :lists
end
end
Run Code Online (Sandbox Code Playgroud)
这给了我这个:
class CreateIdeas < ActiveRecord::Migration
def change
create_table :ideas do |t|
t.string :name
t.text :description
t.string :picture
t.integer :list_id
t.timestamps
end
add_foreign_key :ideas, :lists
end
end
Run Code Online (Sandbox Code Playgroud)
然后我输入
rake db:migrate
Run Code Online (Sandbox Code Playgroud)
知道为什么我会收到一个错误,说没有列?我还是RoR的新人.我是否必须以其他方式添加列?
谢谢
ruby migration ruby-on-rails rails-migrations ruby-on-rails-3
是否可以从现有应用程序中完全删除数据库和所有迁移记录等,以便我可以从头开始重新设计数据库?
database sqlite activerecord rails-migrations ruby-on-rails-3
我一直在研究一个带有sqlite(Rails开发环境的默认设置)的Rails 4.0应用程序,用于事件(黑客马拉松),它有一个父模型,Event,可以有很多Press_Blurbs.
首先,我运行了一些脚手架生成器,这些生成器创建了一些我看似没有问题的迁移:
class CreateEvents < ActiveRecord::Migration
def change
create_table :events do |t|
t.string :city
t.string :theme
t.datetime :hackathon_start
t.datetime :hackathon_end
t.datetime :show_start
t.datetime :show_end
t.text :about
t.string :hack_rsvp_url
t.string :show_rsvp_url
t.timestamps
end
end
end
class CreatePressBlurbs < ActiveRecord::Migration
def change
create_table :press_blurbs do |t|
t.string :headline
t.string :source_name
t.string :source_url
t.string :logo_uri
t.timestamps
end
end
end
Run Code Online (Sandbox Code Playgroud)
然后我为模型添加了一些关系:
class Event < ActiveRecord::Base
has_many :press_blurbs
end
class PressBlurb < ActiveRecord::Base
belongs_to :event
end
Run Code Online (Sandbox Code Playgroud)
...并添加/运行迁移以添加表引用:
class AddEventRefToPressBlurbs < ActiveRecord::Migration
def change
add_column …Run Code Online (Sandbox Code Playgroud) 有一个很好的问题,在这里我想阐述一下.我试图将我的数据库中的列转换为字符串为整数.
我认为转换将是非常直接的转发.目前我的字符串是
["10", "12", "125", "135", "140", ...]
Run Code Online (Sandbox Code Playgroud)
我的迁移文件包括:
def change
change_column :table_name, :product_code, :integer
end
Run Code Online (Sandbox Code Playgroud)
Rails尝试这个,但Postgresql回复了一个错误.
PG ::错误:错误:列"product_code"无法自动转换为类型integer
HINT:指定USING表达式以执行转换.
我不确定如何在rails迁移中使用这个'USING'表达式.
所以我认为转换非常简单.我应该使用什么作为USING表达式?
我想要一个Customer带有普通主键的模型和另一个用于存储自定义"客户编号"的列.另外,我希望db能够处理默认的客户编号.我认为,定义序列是最好的方法.我使用PostgreSQL.看看我的迁移:
class CreateAccountsCustomers < ActiveRecord::Migration
def up
say "Creating sequenze for customer number starting at 1002"
execute 'CREATE SEQUENCE customer_no_seq START 1002;'
create_table :accounts_customers do |t|
t.string :type
t.integer :customer_no, :unique => true
t.integer :salutation, :limit => 1
t.string :cp_name_1
t.string :cp_name_2
t.string :cp_name_3
t.string :cp_name_4
t.string :name_first, :limit => 55
t.string :name_last, :limit => 55
t.timestamps
end
say "Adding NEXTVAL('customer_no_seq') to column cust_id"
execute "ALTER TABLE accounts_customers ALTER COLUMN customer_no SET DEFAULT NEXTVAL('customer_no_seq');"
end
def down
drop_table …Run Code Online (Sandbox Code Playgroud) ruby-on-rails rails-models rails-migrations rails-postgresql ruby-on-rails-3.1
我有一个表: db/migrate/20140731201801_create_voc_brands.rb:
class CreateVocBrands < ActiveRecord::Migration
def change
create_table :voc_brands do |t|
t.string :name
t.timestamps
end
end
end
Run Code Online (Sandbox Code Playgroud)
但我需要将表更改为此(如果我将从零创建它):
class CreateVocBrands < ActiveRecord::Migration
def change
create_table :voc_brands, :id => false do |t|
t.uuid :id, :primary_key => true
t.string :name
t.timestamps
end
add_index :voc_brands, :id
end
end
Run Code Online (Sandbox Code Playgroud)
如何使用迁移更改此设置?
我是ruby on rails的新手,我正在尝试创建一个教程.我执行时遇到问题rake db:migrate.
hugo@ubuntu:~/pin_board$ rake db:migrate
/home/hugo/.rvm/gems/ruby-2.2.2/gems/activesupport-4.0.5/lib/active_support/values/time_zone.rb:283: warning: circular argument reference - now
Run Code Online (Sandbox Code Playgroud)
是什么导致这个?
有人能帮助我吗?
在Rails的指南,活动记录迁移说,你可以做
change_column_default :products, :approved, from: true, to: false
Run Code Online (Sandbox Code Playgroud)
我change在Rails中有一个方法,类似于以下内容:
change_column_default :people, :height, from: nil, to: 0
Run Code Online (Sandbox Code Playgroud)
意图从没有任何默认值,到默认值为零.
但是,当我尝试回滚时,我得到了
ActiveRecord::IrreversibleMigration: ActiveRecord::IrreversibleMigration
Run Code Online (Sandbox Code Playgroud)
考虑到我给Rails中from和to,为什么没有接受它?
我正在使用Rails 4.2.0.
ruby-on-rails rails-migrations ruby-on-rails-4 rails-activerecord
如何通过添加外键来指定不同的表名.例如
我有一个像这样的模特
class MyPost < ActiveRecord::Base
has_many :comments, class_name: PostComment
end
class PostComment < ActiveRecord::Base
belongs_to :post, class_name: MyPost
end
Run Code Online (Sandbox Code Playgroud)
现在我想改变我的迁移文件,如下所示:
class CreatePostComments < ActiveRecord::Migration
def change
create_table :post_comments do |t|
t.belongs_to :post, index: true
t.timestamps null: false
end
add_foreign_key :post, :class_name => MyPost
end
end
Run Code Online (Sandbox Code Playgroud)
但它没有用.迁移正在取消.如何更改我的迁移文件以使用我的模型结构.
ruby-on-rails rails-migrations ruby-on-rails-3 ruby-on-rails-4
rails-migrations ×10
migration ×2
ruby ×2
activerecord ×1
database ×1
postgresql ×1
rails-models ×1
rubygems ×1
sqlite ×1