标签: rails-migrations

访问rails 3迁移中的自定义帮助程序方法

在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")但无法想象如何解决问题(现在我只是复制了迁移文件中的代码,只是为了检查它做它应该做的事情).

弗朗切斯科

rails-migrations ruby-on-rails-3

3
推荐指数
1
解决办法
2491
查看次数

为什么rails数据库id在销毁中间项后继续向前计数?

标题可能不那么清楚,无论如何最好只看一下:

我创建/销毁项目A,B和C的顺序是:

  1. 创建A - > id:1
  2. 创建B - > id:2
  3. 摧毁B.
  4. 创建C - > id:3

我已经摧毁了B,C应该算得id:2对吗?

ruby-on-rails relational-database rails-migrations ruby-on-rails-3

3
推荐指数
1
解决办法
195
查看次数

Rails迁移中的临时索引名称太长

我在尝试回滚我的一个迁移时遇到了问题.看起来好像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)

我已经更改了列名,但示例仍然存在.我可以在第二次迁移中进行更改,但这仍然意味着我无法在此表上回滚迁移.我可以在新的迁移中重命名索引,但这仍然使我无法进行单次迁移.

有没有人有关于如何解决这个问题的想法?

ruby-on-rails rails-migrations ruby-on-rails-3

3
推荐指数
1
解决办法
3224
查看次数

如何创建原始SQL种子迁移

我创建了城市模型,并且所有需要存储在.sql文件中的城市表中的城市。该sql文件具有所需的所有“插入”语句。

因此,我想创建一个种子文件以从sql文件添加所有城市。如何使用sql命令播种数据库?

谢谢!

rails-migrations ruby-on-rails-3

3
推荐指数
1
解决办法
764
查看次数

rake db:rollback恢复错误的迁移

我有一个问题要恢复上次迁移.

自从我安装了'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)

rake rails-migrations ruby-on-rails-3.2

3
推荐指数
1
解决办法
2036
查看次数

帖子中的NoMethodError#show;

我一直在学习铁路

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中定义标题时,请帮助我解释为什么会出现此错误.

rails-migrations

3
推荐指数
1
解决办法
5793
查看次数

Rails 4:SQLException:没有这样的表:

我在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)

ruby-on-rails rails-migrations

3
推荐指数
1
解决办法
7057
查看次数

null:false和required之间的区别:在rails中为true

在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)

如果两者不同,那么它们究竟有何不同?

提前致谢:)

ruby-on-rails rails-migrations

3
推荐指数
1
解决办法
1659
查看次数

Rails引擎在外键中出现问题

我正在开发一个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

3
推荐指数
1
解决办法
540
查看次数

在rails db:migrate成功之后,在psql中找不到"关系"

作为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并报告成功.

如果第一部分没有工作,它实际上创建了模式,我想我会以某种方式指向错误的数据库.

想法?

postgresql rails-migrations ruby-on-rails-4

3
推荐指数
1
解决办法
1659
查看次数