Ruby 在 Rails 5 - seeds.rb
Ruby on Rails 5 - seeds.rb
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$
rails 5 的新功能之一是耙子已移入 rails,因此请使用
rails db:seed
而不是
rake db:seed
另外请确保在尝试播种之前创建数据库和运行任何迁移。
堆栈跟踪表明初始化方法是发生错误的地方。您的用户模型有很多角色。据推测,您有一个 'belongs_to' 用户的榜样。理想情况下,用户 table 中会有一个 role_id 列。如果您没有,请查找 运行ning 迁移以获取参考 here 并将 role_id 的默认值设置为“0”。任何时候在没有角色 ID 的情况下创建用户,它将被设置为零。那么你的种子文件应该可以运行原样。
您的错误在 User#initialize
。尽量避免覆盖 ActiveRecord::Base
对象的初始值设定项。
如果你这样做:
User.create(firstName: "xyz", lastName: "xyz")
初始化程序将被调用:
def initialize(role_id = 0)
role_id # => { firstName: "xyz", lastName: "xyz" }
end
在您的情况下,您应该创建另一个存储用户角色的列(作为字符串),或者创建另一个 table 存储角色。
解决方案:
生成迁移:
rails g migration add_role_to_user
打开生成的迁移:
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
中所见
用户table的列是firstName
和lastName
。
因此,要创建用户,您需要将这些用作键:
User.create(firstName: "Jack", lastName: "Sparrow")
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$
rails 5 的新功能之一是耙子已移入 rails,因此请使用
rails db:seed
而不是
rake db:seed
另外请确保在尝试播种之前创建数据库和运行任何迁移。
堆栈跟踪表明初始化方法是发生错误的地方。您的用户模型有很多角色。据推测,您有一个 'belongs_to' 用户的榜样。理想情况下,用户 table 中会有一个 role_id 列。如果您没有,请查找 运行ning 迁移以获取参考 here 并将 role_id 的默认值设置为“0”。任何时候在没有角色 ID 的情况下创建用户,它将被设置为零。那么你的种子文件应该可以运行原样。
您的错误在 User#initialize
。尽量避免覆盖 ActiveRecord::Base
对象的初始值设定项。
如果你这样做:
User.create(firstName: "xyz", lastName: "xyz")
初始化程序将被调用:
def initialize(role_id = 0)
role_id # => { firstName: "xyz", lastName: "xyz" }
end
在您的情况下,您应该创建另一个存储用户角色的列(作为字符串),或者创建另一个 table 存储角色。
解决方案:
生成迁移:
rails g migration add_role_to_user
打开生成的迁移:
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
用户table的列是firstName
和lastName
。
因此,要创建用户,您需要将这些用作键:
User.create(firstName: "Jack", lastName: "Sparrow")