如何使用没有rails的活动记录

伙计我试图使用没有rails的活动记录,似乎无法使has_many正常工作。 我从未尝试使用没有rails的活动记录。 我可以从单个表中查询,但这些关系似乎不起作用。 任何人都可以快速浏览一下,看看我是否遗漏了任何东西。 这是存根

#!/usr/bin/ruby require 'rubygems' gem 'activerecord' require 'sqlite3' require 'active_record' ActiveRecord::Base.establish_connection( :adapter => 'sqlite3', :database => 'test.db' ) class User < ActiveRecord::Base has_many :problems end class Problem  .schema users CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "first_name" varchar(255), "last_name" varchar(255)); sqlite> .schema problems CREATE TABLE "problems" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "user_id" integer, "desc" varchar(255)); and some selects to show some data from the tables sqlite> select * from users; 2|mike|smit 3|mike|wilson sqlite> select * from problems; 1||first problem 2||it went 3||this is a new problem 4||some more junk data 

这是错误

 ruby-1.8.7-p352/gems/activemodel-3.2.3/lib/active_model/attribute_methods.rb:407:in `method_missing': \ undefined method `problem' for # (NoMethodError) from /home/wileybd/.rvm/gems/ruby-1.8.7-p352/gems/activerecord-3.2.3/lib/active_record/attribute_methods.rb:148:in `method_missing' from ./main.rb:38:in `check_has_many' from ./main.rb:44 

任何帮助,将不胜感激。

我想我知道你要做什么。 如果我没弄错,你想显示给定用户的每个问题的desc值。

完成所需的简单方法是结合最后两种方法:

 user = User.first user.problems.each do |pr| puts pr.desc end 

您在代码中遇到的问题是在语义上您说的是“显示用户的问题描述(注意它是单数的)”,而不是说“显示用户具有的每个问题的描述”,如果它可能应该是这样的:

 puts user.problems.descs # This will not work 

但这不是它的工作方式。 但是,您可以使用一种新方法 :

 puts user.problems.pluck(:desc) 

该方法将为用户生成每个问题的desc值的数组。 您可以使用输出来按照自己喜欢的方式进行打印。

您提供的堆栈跟踪确切地说明了错误是什么。 它在check_has_many方法中:

 def check_has_many user = User.find(:first) puts user.problem.desc # <==== should be user.problems end 

您的用户有很多问题,因此必须是复数:

 def check_has_many user = User.find(:first) puts user.problems.first.desc # <==== do this instead end 

此外,问题模型中的belongs_to:users关系应该是单数的:

 class Problem < ActiveRecord::Base belongs_to :user # <=== singular, not :users end