我需要坚持 seeds.rb 文件吗?当我耙db:seed
时,我收到回复" rake aborted"
我正在使用rails 5.0.0
任何帮助将不胜感激。感谢。
enter code here
bdme551@bdme551:~/bdme/bin$ rails db:seed --trace
Looks like your app's ./bin/rails is a stub that was generated by Bundler.
In Rails 5, your app's bin/ directory contains executables that are versioned
like any other source code, rather than stubs that are generated on demand.
Here's how to upgrade:
bundle config --delete bin # Turn off Bundler's stub generator
rails app:update:bin # Use the new Rails 5 executables
git add bin # Add bin/ to source control
You may need to remove bin/ from your .gitignore as well.
When you install a gem whose executable you want to use in your app,
generate it and add it to source control:
bundle binstubs some-gem-name
git add bin/new-executable
** Invoke db:seed (first_time)
** Execute db:seed
** Invoke db:abort_if_pending_migrations (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:abort_if_pending_migrations
============= WARNING FROM mysql2 =============
The options :user, :pass, :hostname, :dbname, :db, and :sock will be deprecated at some point in the future.
Instead, please use :username, :password, :host, :port, :database, :socket, :flags for the options.
============= END WARNING FROM mysql2 =========
rails aborted!
NoMethodError: undefined method `to_i' for {:name=>"FirstName"}:Hash
Did you mean? to_s
to_a
to_h
/home/bdme551/bdme/app/models/user.rb:8:in `initialize'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/activerecord-5.0.0/lib/active_record/inheritance.rb:65:in `new'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/activerecord-5.0.0/lib/active_record/inheritance.rb:65:in `new'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/activerecord-5.0.0/lib/active_record/persistence.rb:33:in `create'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/activerecord-5.0.0/lib/active_record/persistence.rb:31:in `block in create'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/activerecord-5.0.0/lib/active_record/persistence.rb:31:in `collect'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/activerecord-5.0.0/lib/active_record/persistence.rb:31:in `create'
/home/bdme551/bdme/db/seeds.rb:11:in `<top (required)>'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/activesupport-5.0.0/lib/active_support/dependencies.rb:287:in `load'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/activesupport-5.0.0/lib/active_support/dependencies.rb:287:in `block in load'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/activesupport-5.0.0/lib/active_support/dependencies.rb:259:in `load_dependency'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/activesupport-5.0.0/lib/active_support/dependencies.rb:287:in `load'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/railties-5.0.0/lib/rails/engine.rb:549:in `load_seed'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/activerecord-5.0.0/lib/active_record/tasks/database_tasks.rb:268:in `load_seed'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/activerecord-5.0.0/lib/active_record/railties/databases.rake:196:in `block (2 levels) in <top (required)>'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/rake-11.2.2/lib/rake/task.rb:248:in `block in execute'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/rake-11.2.2/lib/rake/task.rb:243:in `each'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/rake-11.2.2/lib/rake/task.rb:243:in `execute'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/rake-11.2.2/lib/rake/task.rb:187:in `block in invoke_with_call_chain'
/home/bdme551/.rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/monitor.rb:214:in `mon_synchronize'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/rake-11.2.2/lib/rake/task.rb:180:in `invoke_with_call_chain'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/rake-11.2.2/lib/rake/task.rb:173:in `invoke'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/rake-11.2.2/lib/rake/application.rb:152:in `invoke_task'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/rake-11.2.2/lib/rake/application.rb:108:in `block (2 levels) in top_level'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/rake-11.2.2/lib/rake/application.rb:108:in `each'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/rake-11.2.2/lib/rake/application.rb:108:in `block in top_level'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/rake-11.2.2/lib/rake/application.rb:117:in `run_with_threads'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/rake-11.2.2/lib/rake/application.rb:102:in `top_level'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/railties-5.0.0/lib/rails/commands/rake_proxy.rb:13:in `block in run_rake_task'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/rake-11.2.2/lib/rake/application.rb:178:in `standard_exception_handling'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/railties-5.0.0/lib/rails/commands/rake_proxy.rb:10:in `run_rake_task'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/railties-5.0.0/lib/rails/commands/commands_tasks.rb:51:in `run_command!'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/railties-5.0.0/lib/rails/commands.rb:18:in `<top (required)>'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/railties-5.0.0/lib/rails/app_loader.rb:46:in `require'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/railties-5.0.0/lib/rails/app_loader.rb:46:in `block in exec_app'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/railties-5.0.0/lib/rails/app_loader.rb:35:in `loop'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/railties-5.0.0/lib/rails/app_loader.rb:35:in `exec_app'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/railties-5.0.0/lib/rails/cli.rb:5:in `<top (required)>'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/railties-5.0.0/exe/rails:9:in `require'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/railties-5.0.0/exe/rails:9:in `<top (required)>'
/home/bdme551/.rvm/gems/ruby-2.3.1/bin/rails:23:in `load'
/home/bdme551/.rvm/gems/ruby-2.3.1/bin/rails:23:in `<main>'
/home/bdme551/.rvm/gems/ruby-2.3.1/bin/ruby_executable_hooks:15:in `eval'
/home/bdme551/.rvm/gems/ruby-2.3.1/bin/ruby_executable_hooks:15:in `<main>'
Tasks: TOP => db:seed
bdme551@bdme551:~/bdme/bin$
user.rb
class User < ActiveRecord::Base
has_many :roles
ROLES = {0 => :guest, 1 => :user, 2 => :moderator, 3 => :admin}
attr_reader :role
def initialize(role_id = 0)
@role = ROLES.has_key?(role_id.to_i) ? ROLES[role_id.to_i] : ROLES[0]
end
def role?(role_name)
role == role_name
end
end
seeds.rb
# This file should contain all the record creation needed to seed the database with its default values.
# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
#
# Examples:
#
# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }])
# Mayor.create(name: 'Emanuel', city: cities.first)
# DELETED - REBASED VERSION!!!
users = User.create([
{ name: 'FirstName' }, { name: 'LastName' }, { user_id: 'userid'} ])
# {name: "Lecture 8", user_id: 1, link: "http://flatiron-school.s3.amazonaws.com/ruby-003/reviews/playister-associations-with-artists.mp4", description: "Playlister App - Associations with Artists", lecture_date: "10/11/2013"},
supplies = Supplies.create([
{ description: 'description' }, { medline_id: 'medline_id' }, { vendor: 'vendor' }, { HCPCS: 'HCPCS' } ])
# {body: "Installing the **Guard gem** to automatically run rspec tests after each Rails file save action.", video_timestamp: 3783.467413, video_id: 5, created_at: "2013-12-04 20:55:41", updated_at: "2013-12-04 22:08:00", user_id: 3}
# ])
# notes_steph = Note.create([
# {body: "We use groupings for gems to specify which environments gems are active in. Here, the rspec, capybara, and selenium gems are grouped in both the test and development environments.", video_timestamp: 2408.407864, video_id: 5, created_at: "2013-12-04 20:54:11", updated_at: "2013-12-04 20:54:11", user_id: 2},
# {body: "Drawing the routes for the ```Post``` controller via a resource, which generates the 7 standard routes: index, new, create, edit, update, show, and destroy. ", video_timestamp: 4257.238568, video_id: 5, created_at: "2013-12-04 20:58:44", updated_at: "2013-12-04 20:58:44", user_id: 2},
# {body: "Side-by-side comparison of routes with the `Post` controller. Shows how a certain route corresponds to a specific action within a controller.", video_timestamp: 5100.092628, video_id: 5, created_at: "2013-12-04 21:00:50", updated_at: "2013-12-04 21:00:50", user_id: 2},
# { body: "![DHH](http://static.guim.co.uk/sys-images/Technology/Pix/pictures/2007/12/12/heinemeier.article.jpg 'DHH')", video_timestamp: 5661.311041, video_id: 5, created_at: "2013-12-04 21:05:03", updated_at: "2013-12-04 21:05:03", user_id: 2},
# { body: "\n\n- - Review routes\n- - Relationship between MVC\n- - Basics of CRUD app\n- - Best Practices", video_timestamp: 6357.539163, video_id: 5, created_at: "2013-12-04 21:07:32", updated_at: "2013-12-04 22:00:02", user_id: 2},
# {body: "**Generating a Rails App** - what's the importance of `-T` ?", video_timestamp: 125, video_id: 5, created_at: "2013-12-04 20:41:41", updated_at: "2013-12-04 22:07:09", user_id: 2},
# {body: "**Reviewing the Gemfile** - what does the 'turbolink' gem do?", video_timestamp: 590.109342, video_id: 5, created_at: "2013-12-04 20:44:01", updated_at: "2013-12-04 22:07:16", user_id: 2},
# {body: "**Gem Version Notation:** `~> 4.0.0` means to use any minor version greater than 4.0.0 and less than 4.1.0. `>= 1.3.0` means to use the most recent version greater than 1.3.0.", video_timestamp: 612.732023, video_id: 5, created_at: "2013-12-04 20:50:02", updated_at: "2013-12-04 22:07:24", user_id: 2},
# {body: "Differences between the **test, development, and production databases**. Development is a database that's used during the feature development process, whereas production is a database that's used for production purposes.", video_timestamp: 1157.556356, video_id: 5, created_at: "2013-12-04 20:52:15", updated_at: "2013-12-04 22:07:44", user_id: 2},
# {body: "Installing the **Guard gem** to automatically run rspec tests after each Rails file save action.", video_timestamp: 3783.467413, video_id: 5, created_at: "2013-12-04 20:55:41", updated_at: "2013-12-04 22:08:00", user_id: 2}
# ])
# notes_saron = Note.create([
# {body: "We use groupings for gems to specify which environments gems are active in. Here, the rspec, capybara, and selenium gems are grouped in both the test and development environments.", video_timestamp: 2408.407864, video_id: 5, created_at: "2013-12-04 20:54:11", updated_at: "2013-12-04 20:54:11", user_id: 4},
# {body: "Drawing the routes for the ```Post``` controller via a resource, which generates the 7 standard routes: index, new, create, edit, update, show, and destroy. ", video_timestamp: 4257.238568, video_id: 5, created_at: "2013-12-04 20:58:44", updated_at: "2013-12-04 20:58:44", user_id: 4},
# {body: "Side-by-side comparison of routes with the `Post` controller. Shows how a certain route corresponds to a specific action within a controller.", video_timestamp: 5100.092628, video_id: 5, created_at: "2013-12-04 21:00:50", updated_at: "2013-12-04 21:00:50", user_id: 4},
# { body: "![DHH](http://static.guim.co.uk/sys-images/Technology/Pix/pictures/2007/12/12/heinemeier.article.jpg 'DHH')", video_timestamp: 5661.311041, video_id: 5, created_at: "2013-12-04 21:05:03", updated_at: "2013-12-04 21:05:03", user_id: 4},
# { body: "\n\n- - Review routes\n- - Relationship between MVC\n- - Basics of CRUD app\n- - Best Practices", video_timestamp: 6357.539163, video_id: 5, created_at: "2013-12-04 21:07:32", updated_at: "2013-12-04 22:00:02", user_id: 4},
# {body: "**Generating a Rails App** - what's the importance of `-T` ?", video_timestamp: 125, video_id: 5, created_at: "2013-12-04 20:41:41", updated_at: "2013-12-04 22:07:09", user_id: 4},
# {body: "**Reviewing the Gemfile** - what does the 'turbolink' gem do?", video_timestamp: 590.109342, video_id: 5, created_at: "2013-12-04 20:44:01", updated_at: "2013-12-04 22:07:16", user_id: 4},
# {body: "**Gem Version Notation:** `~> 4.0.0` means to use any minor version greater than 4.0.0 and less than 4.1.0. `>= 1.3.0` means to use the most recent version greater than 1.3.0.", video_timestamp: 612.732023, video_id: 5, created_at: "2013-12-04 20:50:02", updated_at: "2013-12-04 22:07:24", user_id: 4},
# {body: "Differences between the **test, development, and production databases**. Development is a database that's used during the feature development process, whereas production is a database that's used for production purposes.", video_timestamp: 1157.556356, video_id: 5, created_at: "2013-12-04 20:52:15", updated_at: "2013-12-04 22:07:44", user_id: 4},
# {body: "Installing the **Guard gem** to automatically run rspec tests after each Rails file save action.", video_timestamp: 3783.467413, video_id: 5, created_at: "2013-12-04 20:55:41", updated_at: "2013-12-04 22:08:00", user_id: 4}
# ])
schema.rb
ActiveRecord::Schema.define(version: 20160717055159) do
create_table "bdme9s", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "role", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
t.string "name", limit: 30, null: false
end
create_table "supplies", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
t.string "Description", limit: 47
t.string "Medline_Id", limit: 20
t.string "Manuf_Id", limit: 20
t.integer "Qty"
t.string "Pkgd", limit: 7
t.float "Price", limit: 53
t.string "Vendor", limit: 8
t.string "HCPCS", limit: 5
t.index ["id"], name: "id", unique: true, using: :btree
t.index ["id"], name: "id_2", using: :btree
end
create_table "users", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
t.string "userid", limit: 30, null: false
t.string "FirstName", limit: 20, null: false
t.string "LastName", limit: 30, null: false
t.index ["id"], name: "id", unique: true, using: :btree
end
end
新的错误消息
bdme551@bdme551:~/bdme/bin$ rails db:seed --trace
** Invoke db:seed (first_time)
** Execute db:seed
** Invoke db:abort_if_pending_migrations (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:abort_if_pending_migrations
============= WARNING FROM mysql2 =============
The options :user, :pass, :hostname, :dbname, :db, and :sock will be deprecated at some point in the future.
Instead, please use :username, :password, :host, :port, :database, :socket, :flags for the options.
============= END WARNING FROM mysql2 =========
rails aborted!
NoMethodError: undefined method `create' for User:Class
/home/bdme551/bdme/db/seeds.rb:11:in `<top (required)>'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/activesupport-5.0.0/lib/active_support/dependencies.rb:287:in `load'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/activesupport-5.0.0/lib/active_support/dependencies.rb:287:in `block in load'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/activesupport-5.0.0/lib/active_support/dependencies.rb:259:in `load_dependency'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/activesupport-5.0.0/lib/active_support/dependencies.rb:287:in `load'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/railties-5.0.0/lib/rails/engine.rb:549:in `load_seed'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/activerecord-5.0.0/lib/active_record/tasks/database_tasks.rb:268:in `load_seed'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/activerecord-5.0.0/lib/active_record/railties/databases.rake:196:in `block (2 levels) in <top (required)>'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/rake-11.2.2/lib/rake/task.rb:248:in `block in execute'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/rake-11.2.2/lib/rake/task.rb:243:in `each'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/rake-11.2.2/lib/rake/task.rb:243:in `execute'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/rake-11.2.2/lib/rake/task.rb:187:in `block in invoke_with_call_chain'
/home/bdme551/.rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/monitor.rb:214:in `mon_synchronize'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/rake-11.2.2/lib/rake/task.rb:180:in `invoke_with_call_chain'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/rake-11.2.2/lib/rake/task.rb:173:in `invoke'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/rake-11.2.2/lib/rake/application.rb:152:in `invoke_task'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/rake-11.2.2/lib/rake/application.rb:108:in `block (2 levels) in top_level'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/rake-11.2.2/lib/rake/application.rb:108:in `each'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/rake-11.2.2/lib/rake/application.rb:108:in `block in top_level'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/rake-11.2.2/lib/rake/application.rb:117:in `run_with_threads'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/rake-11.2.2/lib/rake/application.rb:102:in `top_level'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/railties-5.0.0/lib/rails/commands/rake_proxy.rb:13:in `block in run_rake_task'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/rake-11.2.2/lib/rake/application.rb:178:in `standard_exception_handling'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/railties-5.0.0/lib/rails/commands/rake_proxy.rb:10:in `run_rake_task'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/railties-5.0.0/lib/rails/commands/commands_tasks.rb:51:in `run_command!'
/home/bdme551/.rvm/gems/ruby-2.3.1/gems/railties-5.0.0/lib/rails/commands.rb:18:in `<top (required)>'
bin/rails:4:in `require'
bin/rails:4:in `<main>'
Tasks: TOP => db:seed
bdme551@bdme551:~/bdme/bin$
答案 0 :(得分:2)
导轨5的一个新功能是rake已在导轨内移动,因此请使用
rails db:seed
而不是
rake db:seed
还要确保在尝试播种之前创建数据库并运行任何迁移。
堆栈跟踪指示initialize方法是发生错误的位置。您的用户模型有许多角色。据推测,你有一个榜样属于&#39; belongs_to&#39;用户。理想情况下,您将在用户表中拥有role_id列。如果您没有,请查找为参考here运行迁移,并将role_id的默认值设置为&#39; 0&#39;。无论何时创建没有角色ID的用户,它都将被设置为零。然后您的种子文件应该可以按原样运行。
答案 1 :(得分:2)
您的错误位于User#initialize
。尽量避免覆盖ActiveRecord::Base
对象的初始值设定项。
如果你这样做:
User.create(firstName: "xyz", lastName: "xyz")
初始化程序将通过以下方式调用:
def initialize(role_id = 0)
role_id # => { firstName: "xyz", lastName: "xyz" }
end
在您的情况下,您应该创建另一个存储用户角色的列(作为字符串),或创建另一个存储角色的表。
解决方案:
生成迁移:
rails g migration add_role_to_user
打开生成的migraton:
class AddRoleToUser < ActiveRecord::Migration
def change
add_column :users, :role, :string, default: "guest"
end
end
在您的用户模型中:
class User < ActiveRecord::Base
def guest?
role == "guest"
end
end
您可以在schema.rb
中看到
用户表的列为firstName
和lastName
。
因此,要创建用户,您需要将它们用作键:
User.create(firstName: "Jack", lastName: "Sparrow")