【问题标题】:Getting error in seed.rb when I do rake db:seed was aborted当我 rake db 时,seed.rb 中出现错误:seed 被中止
【发布时间】:2016-02-12 21:25:20
【问题描述】:

我正在尝试在 seed.rb 文件中创建一些数据。当我尝试执行rake db:seed 时出现此错误:

    $ rake db:seed
/Users/romenigld/workspace/ebook/beginning_rails_4_3rd_edition/blog/db/seeds.rb:1: warning: encountered \r in middle of line, treated as a mere space
rake aborted!
SyntaxError: /Users/romenigld/workspace/ebook/beginning_rails_4_3rd_edition/blog/db/seeds.rb:1: syntax error, unexpected tCONSTANT, expecting end-of-input
Category.create([{:name => 'Programmi...
...                               ^
/Users/romenigld/.rvm/gems/ruby-2.2.3/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:268:in `load'
/Users/romenigld/.rvm/gems/ruby-2.2.3/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:268:in `block in load'
/Users/romenigld/.rvm/gems/ruby-2.2.3/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:240:in `load_dependency'
/Users/romenigld/.rvm/gems/ruby-2.2.3/gems/activesupport-4.2.5.1/lib/active_support/dependencies.rb:268:in `load'
/Users/romenigld/.rvm/gems/ruby-2.2.3/gems/railties-4.2.5.1/lib/rails/engine.rb:547:in `load_seed'
/Users/romenigld/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/tasks/database_tasks.rb:250:in `load_seed'
/Users/romenigld/.rvm/gems/ruby-2.2.3/gems/activerecord-4.2.5.1/lib/active_record/railties/databases.rake:183:in `block (2 levels) in <top (required)>'
Tasks: TOP => db:seed
(See full trace by running task with --trace)

我的seed.rb 文件:

user = User.create :email => 'mary@example.com', :password => 'guessit'

Category.create([{:name => 'Programming'},
                 {:name => 'Event'},
                 {:name => 'Travel'},
                 {:name => 'Music'},
                 {:name => 'TV'}])

我的用户.rb:

class User < ActiveRecord::Base
  has_one :profile
  has_many :articles, -> { order('published_at DESC, title ASC')},
                      :dependent => :nullify
end

我的类别.rb:

class Category < ActiveRecord::Base
  has_and_belongs_to_many :articles
end

我的文章.rb:

class Article < ActiveRecord::Base
  validates_presence_of :title, :body

  belongs_to :user
  has_and_belongs_to_many :categories

  def long_title
    "#{title} - #{published_at}"
  end
end

在我创建articles_categories 之前:

class CreateArticlesCategories < ActiveRecord::Migration
  def change
    create_table :articles_categories, :id => false do |t|
      t.references :article
      t.references :category
    end
  end
  def self.down
    drop_table :articles_categories
  end
end

并创建模型类别:

class CreateArticlesCategories < ActiveRecord::Migration
  def change
    create_table :articles_categories, :id => false do |t|
      t.references :article
      t.references :category
    end
  end
  def self.down
    drop_table :articles_categories
  end
end

【问题讨论】:

  • 这是你的整个seeds.rb 文件,还是只是一个sn-p?
  • 你好 michael 我正在关注一本电子书,现在这就是全部内容。谢谢!
  • 如果您复制并粘贴了此代码,请尝试以下 Marko 的答案。从错误上方的警告来看,该行包含一个 \r 字符,这可能会导致您的错误。它是一个回车符,所以你只看到一个正常的换行符。

标签: ruby-on-rails ruby ruby-on-rails-4 rake


【解决方案1】:

您收到的错误只是语法错误。 这是 Rails 在他们的 seed.rb 中提供的示例中的一些代码

# Examples:
#
#   cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }])
#   Mayor.create(name: 'Emanuel', city: cities.first)

这是您的代码。

Category.create([{:name => 'Programming'},
             {:name => 'Event'},
             {:name => 'Travel'},
             {:name => 'Music'},
             {:name => 'TV'}])

尝试将您的代码重新格式化为示例提供的语法 -

Category.create([
             { name: 'Programming'},
             { name: 'Event'},
             { name: 'Travel'},
             { name: 'Music'},
             { name: 'TV'}
           ])

我相信在为数据库播种时,您使用哈希火箭的唯一时间是在涉及播种的数组之外,但我可能是错的,只是一个想法。

希望这会有所帮助!

【讨论】:

  • 这两种风格可以互换。哈希火箭是老方法; “键:值”方式较新。两者都是合法的。
  • 哦,好的。我不确定,因为过去我遇到过类似这样的奇怪问题。只是想确定不是这样。如果您找到解决方案,请更新我很好奇它是什么
  • 所以我只是对整个哈希火箭语法和种子进行了一些研究。它必须与第一行的语法有关。从我所看到的情况来看,该错误通常与忘记在引发错误之前结束某些事情有关。我会检查哈希火箭的语法以确保它是正确的。祝你好运!
猜你喜欢
  • 1970-01-01
  • 2014-04-29
  • 2016-03-17
  • 1970-01-01
  • 2019-07-23
  • 2021-02-25
  • 1970-01-01
  • 2016-11-18
  • 1970-01-01
相关资源
最近更新 更多