edit related record

T

Thufir

There's a one-to-one relation between the base model "item" and the
associated model "page," but the page table is empty and the structure
seems wrong (no fk):

mysql>
mysql> describe rss2mysql.pages;
+-------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| html | text | YES | | NULL | |
+-------+---------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

mysql> Aborted
thufir@ARRAKIS:~/projects/rss2mysql$


It's necessary to use "through" so that the pages table will hold the fk
for the id of the "item" to which a given page is associated with?

More importantly, *how* do you forge the link between a specific item and
the page of which it has_one? If it already has a page, probably I would
want nothing done. However, if it doesn't yet have a page, then I want
to do something like:

page = Page.new
page = f.readlines.join
#somehow connect this page to the id of the current item
page.save

except that every example I see (of a rails controller) is using instance
variables, and, presumably, using rails magic to establish the link
between objects.


thufir@ARRAKIS:~/projects/rss2mysql$
thufir@ARRAKIS:~/projects/rss2mysql$ nl item.rb
1 require 'rubygems'
2 require 'activerecord'

3 class Item < ActiveRecord::Base
4 has_one :page
5 end

thufir@ARRAKIS:~/projects/rss2mysql$ nl page.rb
1 require 'rubygems'
2 require 'activerecord'

3 class Page < ActiveRecord::Base
4 belongs_to :item
5 end
thufir@ARRAKIS:~/projects/rss2mysql$
thufir@ARRAKIS:~/projects/rss2mysql$ nl scrape.rb
1 require 'rubygems'
2 require 'activerecord'
3 require 'yaml'
4 require 'item'
5 require 'open-uri'
6 require 'pp'


7 db = YAML::load(File.open('database.yml'))

8 ActiveRecord::Base.establish_connection(
9 :adapter => db["development"]["adapter"],
10 :host => db["development"]["host"],
11 :username => db["development"]["username"],
12 :password => db["development"]["password"],
13 :database => db["development"]["database"])


14 items = Item.find:)all)

15 items.each do |item|
16 open(item.url,
17 "User-Agent" => "Mozilla/5.0 (X11; U; Linux i686; en-US;
rv:1.9.0.15) Gecko/2009102815 Ubuntu/9.04 (jaunty) Firefox/3.0.15"){|f|

18 #@item.page = @page ?why use instance vars?


19 item.page.html = f.readlines.join
20 item.save}
21 end
thufir@ARRAKIS:~/projects/rss2mysql$




thanks,

Thufir
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,968
Messages
2,570,153
Members
46,699
Latest member
AnneRosen

Latest Threads

Top