Ruby Rails 活动记录创建:无方法错误

Ruby on Rails Active Record create: No Method Error

在 Rails 上使用 Ruby 执行我的第一步,我正在尝试使用活动记录创建我的数据库模型。 现在,我已经这样做了:

rails generate model seminar title 
rails generate model student firstname lastname

比起我 运行 rake db:migrate 并像这样编辑 .rb 文件:

class Seminar < ActiveRecord::Base
has_many :students
end

class Student < ActiveRecord::Base
belongs_to :seminar
end

之后,我在 rails 控制台中创建了一个新的研讨会对象:

 seminar = Seminar.create(title: 'The first')

现在我想创建一个新的学生对象:

seminar.students.create(firstname: 'Peter', lastname: 'Pan')

此时,我收到以下错误:

(0.0ms)  begin transaction
(0.1ms)  rollback transaction
NoMethodError: undefined method `val' for #<Arel::Nodes::BindParam:0x000000057b28c0>
from /home/izb/.rvm/gems/ruby-2.2.0/gems/activerecord-4.2.0/lib/active_record/relation.rb:572:in `block (2 levels) in where_values_hash'
from /home/izb/.rvm/gems/ruby-2.2.0/gems/activerecord-4.2.0/lib/active_record/relation.rb:568:in `fetch'
from /home/izb/.rvm/gems/ruby-2.2.0/gems/activerecord-4.2.0/lib/active_record/relation.rb:568:in `block in where_values_hash'
from /home/izb/.rvm/gems/ruby-2.2.0/gems/activerecord-4.2.0/lib/active_record/relation.rb:566:in `map'
from /home/izb/.rvm/gems/ruby-2.2.0/gems/activerecord-4.2.0/lib/active_record/relation.rb:566:in `where_values_hash'
from /home/izb/.rvm/gems/ruby-2.2.0/gems/activerecord-4.2.0/lib/active_record/relation.rb:579:in `scope_for_create'
from /home/izb/.rvm/gems/ruby-2.2.0/gems/activerecord-4.2.0/lib/active_record/associations/collection_association.rb:503:in `create_scope'
from /home/izb/.rvm/gems/ruby-2.2.0/gems/activerecord-4.2.0/lib/active_record/associations/association.rb:168:in `initialize_attributes'
from /home/izb/.rvm/gems/ruby-2.2.0/gems/activerecord-4.2.0/lib/active_record/associations/association.rb:248:in `block in build_record'
from /home/izb/.rvm/gems/ruby-2.2.0/gems/activerecord-4.2.0/lib/active_record/core.rb:282:in `initialize'
from /home/izb/.rvm/gems/ruby-2.2.0/gems/activerecord-4.2.0/lib/active_record/inheritance.rb:61:in `new'
from /home/izb/.rvm/gems/ruby-2.2.0/gems/activerecord-4.2.0/lib/active_record/inheritance.rb:61:in `new'
from /home/izb/.rvm/gems/ruby-2.2.0/gems/activerecord-4.2.0/lib/active_record/reflection.rb:131:in `build_association'
from /home/izb/.rvm/gems/ruby-2.2.0/gems/activerecord-4.2.0/lib/active_record/associations/association.rb:247:in `build_record'
from /home/izb/.rvm/gems/ruby-2.2.0/gems/activerecord-4.2.0/lib/active_record/associations/collection_association.rb:489:in `block in _create_record'
from /home/izb/.rvm/gems/ruby-2.2.0/gems/activerecord-4.2.0/lib/active_record/associations/collection_association.rb:173:in `block in transaction'
... 11 levels...
from /home/izb/.rvm/gems/ruby-2.2.0/gems/railties-4.2.0/lib/rails/commands/console.rb:9:in `start'
from /home/izb/.rvm/gems/ruby-2.2.0/gems/railties-4.2.0/lib/rails/commands/commands_tasks.rb:68:in `console'
from /home/izb/.rvm/gems/ruby-2.2.0/gems/railties-4.2.0/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
from /home/izb/.rvm/gems/ruby-2.2.0/gems/railties-4.2.0/lib/rails/commands.rb:17:in `<top (required)>'
from /home/izb/.rvm/gems/ruby-2.2.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:274:in `require'
from /home/izb/.rvm/gems/ruby-2.2.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:274:in `block in require'
from /home/izb/.rvm/gems/ruby-2.2.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:240:in `load_dependency'
from /home/izb/.rvm/gems/ruby-2.2.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:274:in `require'
from /home/izb/Development/railstests/modeltest/bin/rails:8:in `<top (required)>'
from /home/izb/.rvm/gems/ruby-2.2.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `load'
from /home/izb/.rvm/gems/ruby-2.2.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `block in load'
from /home/izb/.rvm/gems/ruby-2.2.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:240:in `load_dependency'
from /home/izb/.rvm/gems/ruby-2.2.0/gems/activesupport-4.2.0/lib/active_support/dependencies.rb:268:in `load'
from /home/izb/.rvm/rubies/ruby-2.2.0/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /home/izb/.rvm/rubies/ruby-2.2.0/lib/ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from -e:1:in `<main>'2.2.0 :003 > 

我也想不出问题所在。

另外我想知道我是否需要同时编辑 类 (has_many / belongs_to) 或者这是多余的。

我假设你有以下条件:-

  1. 两个模型..seminar.rbstudent.rb
  2. 两个 tables ..seminarsstudentsseminar_id 列)与迁移

因为当您说 seminars.students.create()...您是 链接两个 table ..稍后由 foreign_key seminar_idstudents table.....

学生 table 中应该有 seminar_id 作为外键 所以 运行 命令 ->

rails g migration add_seminar_id_to_students seminar_id:integer

然后做

rake db:migrate