How to use active record without rails
activerecord, ruby, ruby-on-rails
Solution
I think I know what you're trying to do. If I'm not mistaken you want to display the desc value of every problem for a given user.
An easy way to accomplish what you need is a combination of your last 2 methods:
user = User.first
user.problems.each do |pr|
puts pr.desc
end
The problem you are having in your code is that semantically you are saying something like "display the description of the problem (notice it's singular) of the user" instead of saying "display the description of each problem the user has", which if it were possible should be something like this:
puts user.problems.descs # This will not work
But that is just not the way it works. There is, though, a new method that you could use:
puts user.problems.pluck(:desc)
That method will produce an array of the desc value of each problem for the user. You can probably play with the output to get it printed the way you like.
Problem
Folks Im trying to use active record without rails and cant seem to get has_many working properly. Ive never tried using active record without rails. I can query from single tables but the relationships dont seem to be working. Could anyone take a quick glance and see if im missing anything. Here is the stub ``` #!/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 < ActiveRecord::Base belongs_to :users end def show_single_item pr = Problem.find(:first) puts "showing first problem from the db below", pr.desc end def show_all_items pr = Problem.find(:all) puts "showing all problems from the db below" pr.each do |a| puts a.desc end end def check_has_many user = User.find(:first) puts user.problem.desc end # run some methods show_single_item # works show_all_items # works check_has_many # not working ------ here is the schema of users and problems from the database sqlite> .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 ``` and here is the error ``` ruby-1.8.7-p352/gems/activemodel-3.2.3/lib/active_model/attribute_methods.rb:407:in `method_missing': \ undefined method `problem' for #<User id: 2, first_name: "mike", last_name: "smit"> (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 ``` any help would be appreciated.