using script/console

For the project at <Google Code Archive - Long-term storage for Google Code Project Hosting., I want to use the console to run some queries. I can query a *specific* feed object, I also saw how to do a search, but I want the equivalent to "SELECT * FROM feeds", but using the console.

Also, as there's a relationship between feeds and items, I'd like to create link a feeds row (this is a Feed object?) to an items row, but I can't find the syntax. Any tips please?

thufir@arrakis ~/Desktop/strawr $ thufir@arrakis ~/Desktop/strawr $ script/console Loading development environment.

f=Feed.find(1)

=> #<Feed:0xb70bf6dc @attributes={"item_id"=>"0", "title"=>"aFeed", "id"=>"1", "category_id"=>"0", "location"=>"www.somewhere.com"}>

?> i=Item.find(1) => #<Item:0xb70b2144 @attributes={"title"=>"item title", "is_read"=>"1", "id"=>"1", "pub_date"=>"2007/12/10", "description"=>"an item description", "feed_id"=>"0", "link"=>"www.link.com"}>

?> quit thufir@arrakis ~/Desktop/strawr $ thufir@arrakis ~/Desktop/strawr $ cat db/migrate/001_feeds.rb

class Feeds < ActiveRecord::Migration         def self.up                 create_table :feeds do |table|                         table.column :title, :string                         table.column :location, :string                         table.column :category_id, :integer                         table.column :item_id, :integer                 end         end         def self.down                 drop_table :feeds         end end thufir@arrakis ~/Desktop/strawr $ thufir@arrakis ~/Desktop/strawr $ cat db/migrate/003_items.rb class Items < ActiveRecord::Migration         def self.up                 create_table :items do |table|                         table.column :title, :string                         table.column :is_read, :integer                         table.column :link, :string                         table.column :pub_date, :string                         table.column :description, :string                         table.column :feed_id, :integer

                end         end         def self.down                 drop_table :items         end end thufir@arrakis ~/Desktop/strawr $ thufir@arrakis ~/Desktop/strawr $ cat app/models/feed.rb class Feed < ActiveRecord::Base         has_many :items end thufir@arrakis ~/Desktop/strawr $ thufir@arrakis ~/Desktop/strawr $ cat app/models/item.rb class Item < ActiveRecord::Base         belongs_to :feeds end thufir@arrakis ~/Desktop/strawr $ thufir@arrakis ~/Desktop/strawr $ cd db/ thufir@arrakis ~/Desktop/strawr/db $ thufir@arrakis ~/Desktop/strawr/db $ sqlite3 development.sqlite3 SQLite version 3.4.1 Enter ".help" for instructions

.schema

CREATE TABLE categories ("id" INTEGER PRIMARY KEY NOT NULL, "parent_num" integer DEFAULT NULL, "title" varchar(255) DEFAULT NULL, "feed_id" integer DEFAULT NULL); CREATE TABLE feeds ("id" INTEGER PRIMARY KEY NOT NULL, "title" varchar (255) DEFAULT NULL, "location" varchar(255) DEFAULT NULL, "category_id" integer DEFAULT NULL, "item_id" integer DEFAULT NULL); CREATE TABLE items ("id" INTEGER PRIMARY KEY NOT NULL, "title" varchar (255) DEFAULT NULL, "is_read" integer DEFAULT NULL, "link" varchar(255) DEFAULT NULL, "pub_date" varchar(255) DEFAULT NULL, "description" varchar (255) DEFAULT NULL, "feed_id" integer DEFAULT NULL); CREATE TABLE nodes ("id" INTEGER PRIMARY KEY NOT NULL, "obj_num" integer DEFAULT NULL, "norder" varchar(255) DEFAULT NULL, "type" varchar(255) DEFAULT NULL); CREATE TABLE posts ("id" INTEGER PRIMARY KEY NOT NULL, "post" varchar (255) DEFAULT NULL); CREATE TABLE schema_info (version integer);

.quit

thufir@arrakis ~/Desktop/strawr/db $ thufir@arrakis ~/Desktop/strawr/db $

thanks,

Thufir

Youre Item class should read: belongs_to :feed #singular

Thank you :slight_smile:

I've been mucking about with svn, and completely started over this project with a (mildly) different schema. This is my first foray into the console, pardon, I haven't researched much as I've just been trying to get back to this point:

thufir@arrakis ~/Desktop/strawr $ thufir@arrakis ~/Desktop/strawr $ thufir@arrakis ~/Desktop/strawr $ script/console Loading development environment.

f = Feed.find :first

=> #<Feed:0xb7000188 @attributes={"item_id"=>"0", "feed"=>"feed1", "id"=>"1"}>

f.items.create :item => 'test_item'

=> #<Item:0xb6ff4680 @new_record=false, @errors=#<ActiveRecord::Errors:0xb6ff21dc @errors={}, @base=#<Item:0xb6ff4680 ...>>, @attributes={"id"=>3, "feed_id"=>1, "item"=>"test_item"}>

?> f.items.create :feed => 'test_item' ActiveRecord::AssociationTypeMismatch: Feed expected, got String         from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/ active_record/associations/association_proxy.rb:148:in `raise_on_type_mismatch'         from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/ active_record/associations/belongs_to_association.rb:22:in `replace'         from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/ active_record/associations.rb:923:in `feed='         from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/ active_record/base.rb:1675:in `send'         from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/ active_record/base.rb:1675:in `attributes='         from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/ active_record/base.rb:1674:in `each'         from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/ active_record/base.rb:1674:in `attributes='         from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/ active_record/base.rb:1508:in `initialize_without_callbacks'         from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/ active_record/callbacks.rb:225:in `initialize'         from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/ active_record/associations/has_many_association.rb:13:in `new'         from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/ active_record/associations/has_many_association.rb:13:in `build'         from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/ active_record/associations/association_collection.rb:93:in `create'         from (irb):4

quit

thufir@arrakis ~/Desktop/strawr $ thufir@arrakis ~/Desktop/strawr $ script/console Loading development environment.

f=feed.find :first

NameError: undefined local variable or method `feed' for #<Object:0xb7d5d9ac>         from (irb):1

f=Feed.find :first

=> #<Feed:0xb70b1b54 @attributes={"item_id"=>"0", "feed"=>"feed1", "id"=>"1"}>

f.items.create :feed => 'test_item'

ActiveRecord::AssociationTypeMismatch: Feed expected, got String         from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/ active_record/associations/association_proxy.rb:148:in `raise_on_type_mismatch'         from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/ active_record/associations/belongs_to_association.rb:22:in `replace'         from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/ active_record/associations.rb:923:in `feed='         from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/ active_record/base.rb:1675:in `send'         from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/ active_record/base.rb:1675:in `attributes='         from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/ active_record/base.rb:1674:in `each'         from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/ active_record/base.rb:1674:in `attributes='         from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/ active_record/base.rb:1508:in `initialize_without_callbacks'         from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/ active_record/callbacks.rb:225:in `initialize'         from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/ active_record/associations/has_many_association.rb:13:in `new'         from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/ active_record/associations/has_many_association.rb:13:in `build'         from /usr/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/ active_record/associations/association_collection.rb:93:in `create'         from (irb):3

.quit

SyntaxError: compile error (irb):4: syntax error, unexpected '.' .quit ^         from (irb):4

quit

thufir@arrakis ~/Desktop/strawr $ thufir@arrakis ~/Desktop/strawr $ cat db/migrate/001_categories.rb class Categories < ActiveRecord::Migration         def self.up                 create_table :categories do |table|                         table.column :feed_id, :integer                         table.column :category, :string                 end         end

        def self.down                 drop_table :categories         end end thufir@arrakis ~/Desktop/strawr $ thufir@arrakis ~/Desktop/strawr $ cat db/migrate/002_feeds.rb
class Feeds < ActiveRecord::Migration         def self.up                 create_table :feeds do |table|                         table.column :item_id, :integer                         table.column :feed, :string                 end         end

        def self.down                 drop_table :feeds         end end thufir@arrakis ~/Desktop/strawr $ thufir@arrakis ~/Desktop/strawr $ cat db/migrate/003
cat: db/migrate/003: No such file or directory thufir@arrakis ~/Desktop/strawr $ thufir@arrakis ~/Desktop/strawr $ cat db/migrate/003_items.rb class Items < ActiveRecord::Migration         def self.up                 create_table :items do |table|                         table.column :feed_id, :integer                         table.column :item, :string                 end         end

        def self.down                 drop_table :items         end end thufir@arrakis ~/Desktop/strawr $ thufir@arrakis ~/Desktop/strawr $ cat app/models/category.rb class Category < ActiveRecord::Base         has_many :feeds end thufir@arrakis ~/Desktop/strawr $ thufir@arrakis ~/Desktop/strawr $ cat app/models/feed.rb
class Feed < ActiveRecord::Base         belongs_to :category         has_many :items end thufir@arrakis ~/Desktop/strawr $ thufir@arrakis ~/Desktop/strawr $ cat app/models/item.rb class Item < ActiveRecord::Base         belongs_to :feed end thufir@arrakis ~/Desktop/strawr $ thufir@arrakis ~/Desktop/strawr $

thanks,

Thufir

Youre Item class should read: belongs_to :feed #singular

Thank you :slight_smile:

I've been mucking about with svn, and completely started over this project with a (mildly) different schema. This is my first foray into the console, pardon, I haven't researched much as I've just been trying to get back to this point:

The console isn't magic. Broadly speaking it's just like cracking open your application and fiddling with it's innards: what works in some model code should work in the console

?> f.items.create :feed => 'test_item' ActiveRecord::AssociationTypeMismatch: Feed expected, got String

Exactly what it says on the tin: if item is an item, item.feed should be an instance of feed, not a String

Fred

I figured out some syntax for the console! thanks to <> :slight_smile:

In the following I do some of the CRUD operations. However, as soon as I gave myself a pat on the back I reviewed the models at <http:// strawr.googlecode.com/svn/trunk/app/models/> and it made me think (oh, the horror!).

It should be that a single Category object/row may have multiple Feed objects/rows associated with it -- that's what I want. I suppose it's also possible for a Feed object to belong to multiple Category objects/ rows? That would be preferable.

Maybe I have a models problems? In any event, how would I update one of the Category rows/objects so that there multiple Feed objects/rows associated with it?

thufir@arrakis ~/Desktop/strawr $ thufir@arrakis ~/Desktop/strawr $ thufir@arrakis ~/Desktop/strawr $ script/console Loading development environment.

Category.find :all

=> [#<Category:0xb704c934 @attributes={"category"=>"cat_one", "id"=>"1", "feed_id"=>"0"}>, #<Category:0xb704c8f8 @attributes= {"category"=>"cat_two", "id"=>"2", "feed_id"=>"0"}>, #<Category:0xb704c8d0 @attributes={"category"=>"cat_three", "id"=>"3", "feed_id"=>"0"}>]

?> Feed.find :all => [#<Feed:0xb703e2d0 @attributes={"item_id"=>"0", "feed"=>"feed_one", "id"=>"1"}>, #<Feed:0xb703e294 @attributes={"item_id"=>"0", "feed"=>"feed_two", "id"=>"2"}>, #<Feed:0xb703e26c @attributes= {"item_id"=>"0", "feed"=>"feed_three", "id"=>"3"}>]

?> c=Category.new => #<Category:0xb703cb10 @new_record=true, @attributes= {"category"=>"NULL", "feed_id"=>0}>

?> c => #<Category:0xb703cb10 @new_record=true, @attributes= {"category"=>"NULL", "feed_id"=>0}>

?> c.update_attribute :category, "cat_four_has_feeds" => true

?> Category.find :all => [#<Category:0xb7031d3c @attributes={"category"=>"cat_one", "id"=>"1", "feed_id"=>"0"}>, #<Category:0xb7031d14 @attributes= {"category"=>"cat_two", "id"=>"2", "feed_id"=>"0"}>, #<Category:0xb7031cec @attributes={"category"=>"cat_three", "id"=>"3", "feed_id"=>"0"}>, #<Category:0xb7031cc4 @attributes= {"category"=>"cat_four_has_feeds", "id"=>"4", "feed_id"=>"0"}>]

?> ?> c.update_attribute :feed_id, 1 => true

?> Category.find :all => [#<Category:0xb702a62c @attributes={"category"=>"cat_one", "id"=>"1", "feed_id"=>"0"}>, #<Category:0xb702a604 @attributes= {"category"=>"cat_two", "id"=>"2", "feed_id"=>"0"}>, #<Category:0xb702a5dc @attributes={"category"=>"cat_three", "id"=>"3", "feed_id"=>"0"}>, #<Category:0xb702a5b4 @attributes= {"category"=>"cat_four_has_feeds", "id"=>"4", "feed_id"=>"1"}>]

?> ?> Feed.find :all => [#<Feed:0xb7027134 @attributes={"item_id"=>"0", "feed"=>"feed_one", "id"=>"1"}>, #<Feed:0xb702710c @attributes={"item_id"=>"0", "feed"=>"feed_two", "id"=>"2"}>, #<Feed:0xb70270e4 @attributes= {"item_id"=>"0", "feed"=>"feed_three", "id"=>"3"}>]

?> quit thufir@arrakis ~/Desktop/strawr $ thufir@arrakis ~/Desktop/strawr $

thanks,

Thufir

Take a look at this console tutorial: http://clarkware.com/cgi/blosxom/2006/04/04

Once you're familiar with getting things done in the console, put it in a ruby file such as consoletest.rb and from the console do: load "consoletest.rb".

fredistic

Thanks :slight_smile:

-Thufir