在rails 2中,我有一个lib/migration_helpers.rb文件,其中包含在db中设置和删除外键的方法.通过添加迁移文件,可以在迁移文件中的self.up和self.down中使用这些方法
require 'migration_helpers'
Run Code Online (Sandbox Code Playgroud)
在顶部,和
extend MigrationHelpers
Run Code Online (Sandbox Code Playgroud)
在课堂陈述后立即.
在rails 3中,这不起作用,如果我尝试使用migration_helpers.rb中的set_foreign_key方法运行迁移,则会引发以下错误:
== AddFkToArticles: migrating ================================================
-- set_foreign_key("articles", "book_id", "books")
rake aborted!
An error has occurred, this and all later migrations canceled:
undefined method `set_foreign_key' for #<AddFkToArticles:0x000001034a1f38>
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
Run Code Online (Sandbox Code Playgroud)
我已经在config/application.rb中检查过,自动加载路径设置为包含lib.该文件是有效的,因为如果我注释掉require语句,那么rails会对丢失的'migration_helpers'文件抱怨.
我怀疑这是一个范围问题(rails 2使用"def self.up",rails 3使用"def change")但无法想象如何解决问题(现在我只是复制了迁移文件中的代码,只是为了检查它做它应该做的事情).
弗朗切斯科
标题可能不那么清楚,无论如何最好只看一下:
我创建/销毁项目A,B和C的顺序是:
id:1id:2id:3我已经摧毁了B,C应该算得id:2对吗?
ruby-on-rails relational-database rails-migrations ruby-on-rails-3
我在尝试回滚我的一个迁移时遇到了问题.看起来好像Rails正在为临时索引生成一个临时表.我在这个表上的实际索引少于64个字符,但每当Rails尝试为它创建一个临时索引时,它将变成一个长度超过64个字符的名称,并抛出一个错误.
这是我的简单迁移:
class AddColumnNameToPrices < ActiveRecord::Migration
def self.up
add_column :prices, :column_name, :decimal
end
def self.down
remove_column :prices, :column_name
end
end
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
== AddColumnNameToPrices: reverting ============================================
-- remove_column(:prices, :column_name)
rake aborted!
An error has occurred, this and all later migrations canceled:
Index name 'temp_index_altered_prices_on_column_and_other_column_and_third_column' on table 'altered_prices' is too long; the limit is 64 characters
Run Code Online (Sandbox Code Playgroud)
我已经更改了列名,但示例仍然存在.我可以在第二次迁移中进行更改,但这仍然意味着我无法在此表上回滚迁移.我可以在新的迁移中重命名索引,但这仍然使我无法进行单次迁移.
有没有人有关于如何解决这个问题的想法?
我创建了城市模型,并且所有需要存储在.sql文件中的城市表中的城市。该sql文件具有所需的所有“插入”语句。
因此,我想创建一个种子文件以从sql文件添加所有城市。如何使用sql命令播种数据库?
谢谢!
我有一个问题要恢复上次迁移.
自从我安装了'letrate'宝石进行评级后,任何rake db:rollback恢复精确地都会让宝石迁移,而不是最后的迁移.
我怀疑这是由于宝石本身.
任何想法如何解决这个问题,所以我可以享受非常方便的回滚?
同样的问题:
rake db:migrate:redo
Run Code Online (Sandbox Code Playgroud)
结果:
== CreateRates: reverting ====================================================
-- drop_table(:rates)
-> 0.0224s
== CreateRates: reverted (0.0225s) ===========================================
== CreateRates: migrating ====================================================
-- create_table(:rates)
NOTICE: CREATE TABLE will create implicit sequence "rates_id_seq" for serial column "rates.id"
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "rates_pkey" for table "rates"
-> 0.1787s
-- add_index(:rates, :rater_id)
-> 0.0032s
-- add_index(:rates, [:rateable_id, :rateable_type])
-> 0.0024s
== CreateRates: migrated (0.1850s) ===========================================
Run Code Online (Sandbox Code Playgroud)
rake db:migrate:status
...
up …Run Code Online (Sandbox Code Playgroud) 我一直在学习铁路
http://guides.rubyonrails.org/getting_started.html.
我在控制器中执行保存数据时遇到错误.运行博客时出现的错误是: - nil:NilClass的未定义方法`title'
**
我的posts_controller.rb代码是
**
class PostsController < ApplicationController
def new
end
def create
@post=Post.new(params[:post].permit(:title,:text))
@post.save
redirect_to @post
end
private
def post_params
params.require(:post).permit(:title,:text)
end
def show
@post=Post.find(params[:id])
end
end
Run Code Online (Sandbox Code Playgroud)
**
我的show.html.rb代码是
**
<p>
<strong> Title:</strong>
<%= @post.title %>
</p>
<p>
<strong> Text:</strong>
<%= @post.text %>
</p>
Run Code Online (Sandbox Code Playgroud)
**
create_posts.rb的代码
**
class CreatePosts < ActiveRecord::Migration
def change
create_table :posts do |t|
t.string :title
t.text :text
t.timestamps
end
end
Run Code Online (Sandbox Code Playgroud)
当我在create_posts中定义标题时,请帮助我解释为什么会出现此错误.
我在Rails4中运行以下代码:
$ bundle exec rake db:migrate
== 201405270646 AddAttachmentImageToPins:迁移=========================== - change_table(:pins)rake aborted!StandardError:发生错误,此以及所有后续迁移都已取消:
的SQLite3 ::的SQLException:没有这样的表:引脚:ALTER TABLE "销" ADD "image_file_n AME" VARCHAR(255)C:/站点/ pinteresting /分贝/迁移/ 201405270646_add_attachment_im age_to_pins.rb:4:在
block in up' c:/Sites/pinteresting/db/migrate/201405270646_add_attachment_image_to_pins.rb:3: in向上" C:在` migrate'任务:TOP => db:migrate(通过使用--trace运行任务来查看完整跟踪)
我无法理解为什么我会收到此错误.
这是我的github:https://github.com/frankzk/pinteresting
谢谢您的帮助
迁移文件:
class AddAttachmentImageToPins < ActiveRecord::Migration
def self.up
change_table :pins do |t|
t.attachment :image
end
end
def self.down
drop_attached_file :pins, :image
end
end
Run Code Online (Sandbox Code Playgroud) 在rails迁移中,null: false和之间的区别是required: true什么?
例如.如果我写:
t.string :phone_number, required: true
Run Code Online (Sandbox Code Playgroud)
是这样的:
t.string :phone_number, null: false
Run Code Online (Sandbox Code Playgroud)
如果两者不同,那么它们究竟有何不同?
提前致谢:)
我正在开发一个rails引擎,这是我的 gem.gemspec
s.required_ruby_version = '>= 2.0.0'
s.add_dependency 'rails', '>= 4.2.0'
s.add_dependency 'enumerate_it'
s.add_dependency 'slim-rails'
s.add_dependency 'bootstrap-sass'
s.add_dependency 'jquery-rails'
s.add_development_dependency 'rdoc'
s.add_development_dependency 'tomdoc'
s.add_development_dependency 'sqlite3'
s.add_development_dependency 'rspec-rails'
s.add_development_dependency 'timecop'
s.add_development_dependency 'shoulda-matchers'
s.add_development_dependency 'factory_girl_rails'
s.add_development_dependency 'database_cleaner'
s.add_development_dependency 'awesome_print'
s.add_development_dependency 'guard'
s.add_development_dependency 'guard-rspec'
s.add_development_dependency 'guard-migrate'
s.add_development_dependency 'guard-livereload'
s.add_development_dependency 'thor'
s.add_development_dependency 'simplecov'
s.add_development_dependency 'codeclimate-test-reporter'
Run Code Online (Sandbox Code Playgroud)
这是我的迁移文件,当我运行install命令时,它将复制到我的rails应用程序:
class CreateMpaStorySchema < ActiveRecord::Migration
def change
create_table :mpa_story_archetypes do |t|
t.string :name
t.string :api_name
t.string :api_key
t.text :description
t.integer :kind, index: true
t.integer :tier, index: true
t.integer :execution, index: …Run Code Online (Sandbox Code Playgroud) rspec ruby-on-rails foreign-keys rails-migrations rails-engines
作为Rails新手,我按照railscast#342中的说明在我的Mac上设置postgres数据库连接.
我创建了一个新的rails项目
$ rails new blog -d postgresql
Run Code Online (Sandbox Code Playgroud)
我编辑了数据库yaml文件来设置用户名和密码.
我使用psql添加新用户和密码,并授予它创建表的权限: alter user blog create db
我创建了db via
rake db:create:all
Run Code Online (Sandbox Code Playgroud)
它成功并在psql内部,做\ l列出模式,我看到所有三个模式blog_test,blog_development和blog_production
然后我做
$ rails g scaffold article name content:text
Run Code Online (Sandbox Code Playgroud)
一切看起来都不错
然后我做
$ rake db:migrate
Run Code Online (Sandbox Code Playgroud)
我收到消息显示成功:
$ rake db:migrate
== 20150701220010 CreateArticles: migrating ===================================
-- create_table(:articles)
-> 0.0128s
== 20150701220010 CreateArticles: migrated (0.0129s) ==========================
Run Code Online (Sandbox Code Playgroud)
我设置我的搜索路径来查看架构:
set search_path to lcuff,public,blog_development;
Run Code Online (Sandbox Code Playgroud)
show search_path:
search_path
---------------------------------
lcuff, public, blog_development
Run Code Online (Sandbox Code Playgroud)
但试图找到桌子,
# \d
Run Code Online (Sandbox Code Playgroud)
没有找到关系.
我已经完成了db:migrate VERSION=0它并且它成功报告它丢弃了表,然后我再次创建它db:migrate并报告成功.
如果第一部分没有工作,它实际上创建了模式,我想我会以某种方式指向错误的数据库.
想法?