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 -~----------~----~----~----~------~----~------~--~---