KMiller
2008-Aug-26 20:39 UTC
Problem: has_many, (belongs_to, has_one) creating a many_to_many
I''m very much a rookie with Rails so feel free to clue me in :-)
I have two tables: Series, Paintings
I''m trying to set this one_to_many up so that I have many paintings
within a series i.e
Series: italy
Paintings: pic1, pic2, pic3, etc...
When rails saves the painting and series, it repeats the series for
each painting:
Table Dump
========(dev) kmiller /home/kmiller/workspace/test:echo ''select * from
series''
| $MYSQL -Dtest_development -t
+----+-------+
| id | desc |
+----+-------+
| 1 | italy |
| 2 | italy |
| 3 | italy |
+----+-------+
(dev) kmiller /home/kmiller/workspace/test:echo ''select * from
paintings'' | $MYSQL -Dtest_development -t
+----+-----------+-----------+--------------+-----------------------
+-----------+--------+-------+--------+
| id | parent_id | series_id | content_type | filename |
thumbnail | size | width | height |
+----+-----------+-----------+--------------+-----------------------
+-----------+--------+-------+--------+
| 1 | NULL | 1 | image/jpeg | 31032008010.jpg |
NULL | 124730 | 500 | 375 |
| 2 | 1 | NULL | image/jpeg | 31032008010_thumb.jpg |
thumb | 2743 | 50 | 38 |
| 3 | NULL | 2 | image/jpeg | 31032008012.jpg |
NULL | 128985 | 500 | 375 |
| 4 | 3 | NULL | image/jpeg | 31032008012_thumb.jpg |
thumb | 3090 | 50 | 38 |
| 5 | NULL | 3 | image/jpeg | 31032008011.jpg |
NULL | 131269 | 500 | 375 |
| 6 | 5 | NULL | image/jpeg | 31032008011_thumb.jpg |
thumb | 2878 | 50 | 38 |
+----+-----------+-----------+--------------+-----------------------
+-----------+--------+-------+--------+
Shouldn''t the relevant painting rows all point to a single, unique
series row? At least that''s what I wanted to happen. I also tried
belongs_to in the Painting table but got the same result.
Here''s the code:
Models:
=====
class Series < ActiveRecord::Base
has_many :paintings
end
class Painting < ActiveRecord::Base
has_one :series, :foreign_key => ''series_id''
has_attachment :content_type => :image,
:storage => :file_system,
:max_size => 10.megabytes,
:resize_to => ''500x500>'',
:thumbnails => { :thumb =>
''50x50>'' },
:storage => :file_system,
:path_prefix =>
''/public/uploads''
validates_as_attachment
end
ActiveRecord::Schema.define(:version => 2) do
create_table "paintings", :force => true do |t|
t.integer "parent_id"
t.integer "series_id"
t.string "content_type"
t.string "filename"
t.string "thumbnail"
t.integer "size"
t.integer "width"
t.integer "height"
end
create_table "series", :force => true do |t|
t.string "desc"
end
end
Controller:
======
class PaintingsController < ApplicationController
def index
@paintings = Painting.find(:all, :conditions => { :thumbnail =>
nil })
end
def new
@series = Series.new
@painting = Painting.new
end
def create
@series = Series.new(params[:series])
@painting = @series.paintings.build(params[:painting])
sleep 4
if @series.save
flash[:notice] = "Added painting"
redirect_to paintings_path
else
render :action => ''new''
end
end
end
View
====<% form_for(:painting, :url => { :action => "create" },
:html =>
{ :multipart => true }) do |f| %>
<p>
series:<br /><%= text_field :series, :desc %>
</p>
<p>
image:<br /><%= f.file_field :uploaded_data %>
</p>
<%= submit_tag ''Create'' %>
<% end -%>
Appreciate any help! - thanks
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
Frederick Cheung
2008-Aug-26 22:13 UTC
Re: Problem: has_many, (belongs_to, has_one) creating a many_to_many
On Aug 26, 9:39 pm, KMiller <miller.kur...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > Shouldn''t the relevant painting rows all point to a single, unique > series row? At least that''s what I wanted to happen. I also tried > belongs_to in the Painting table but got the same result. >2 things: it should be a belongs_to. Painting has a series_id column so it has to be Painting belongs_to :series. Secondly, the reason that a new instance of Series is created each time is because you''re asking for one. If you want the painting to be appended to a given Series then you should be using Series.find ... to retrieve the appropriate Series, rather than creating a new one with Series.new Fred --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---