NewVehicle is STI off of Vehicle.
It doesn't matter if you use Vehicle or NewVehicle the outcome is the
same.

Trim definition:
class Trim < ActiveRecord::Base
## Associations
  belongs_to  :model
  has_many    :colors
  has_many    :options

so it has_many options, which is why t.options would of worked along
with find the options by trim id.
class Vehicle < ActiveRecord::Base
def Vehicle:

  ## Associations
  belongs_to                :trim
  belongs_to                :base_exterior_color, :class_name
=>'Colors', :foreign_key => 'exterior_color_base_id'
  has_many        :options_vehicles, :foreign_key => :vehicle_id
  has_many        :options, :through => :options_vehicles

I think you are on the right track.  Since a vehicle belongs to a
trim, that trim already has every single option available for that car
attached to it.  What I want to do is say only X amount of those
options are actually on this Vehicle though.  Vehicle is more of an
instance of a trim.  I do need to store the trims though...i can't
just make them a pure virtual class.

Unique doesn't work exactly.  It's fine on the read, but i still have
double values in the join table.

It must be something to do with the fact trim has_many options and
vehicles belong to a trim?   i would assume this would work as i'm
saving into a join table.

Erik

On Jun 21, 9:29 am, Eric <[email protected]> wrote:
> What are the associations for the Trim model, wrt Options and
> Vehicles? I'm also assuming that the NewVehicle model is a typo and
> it's supposed to be just Vehicle.new in the snippet.
>
> I'm thinking that you need either uniqueness validations or to dedupe
> manually in your save/updates, but it's hard to tell so far.
>
> -eric
>
> On Jun 21, 8:29 am,erik<[email protected]> wrote:
>
> > I'm in Rails 2.2.2 if that matters.
> >Erik
>
> > On Jun 21, 8:27 am,erik<[email protected]> wrote:
>
> > > I don't follow you.
>
> > > I find all the options based on the idea of a trim (a style).  Think
> > > about how a honda civic ex might have different options then a honda
> > > civic lx.  In the real app you would only select a subset of those
> > > options to assign to your vehicle.  Vehicle is kind of like an
> > > instance of a Trim, but it's different and has it's own model.  So I
> > > am grabbing all the options by trim (options =
> > > Option.find_all_by_trim_id(t.id)) and then assigning them to a vehicle
> > > (v.options = options or v.options_ids = options_ids).
>
> > > You are right I could of done t.options instead of
> > > Option.find_all_by_trim_id, but I have tried both.  I replaced:
> > > Option.find_all_by_trim_id with options = t.options and I have 47 in
> > > the array of options, but 94 are saved, 2 each exactly.
>
> > > It works fine if I do:
> > > options.each {|o|
> > >   OptionsVehicle.create({'option_id' => o.option_id, 'vehicle_id' =>
> > > v.id})
>
> > > }
>
> > > and explicitly create the join table values.
>
> > > I have confused rails...I guess.
> > >Erik
>
> > > On Jun 20, 11:40 pm, Eric <[email protected]> wrote:
>
> > > > On Jun 20, 5:18 pm,erik<[email protected]> wrote:
>
> > > > > I have tried this both ways and each time same results, duplicate
> > > > > entries.
>
> > > > > Here is the simple test:
> > > > > t = Trim.find(:first, :conditions => ['id > 65000000'])
> > > > > options = Option.find_all_by_trim_id(t.id)
> > > > > puts options.size
> > > > > v = NewVehicle.new({:trim_id => t.id})
> > > > > v.option_ids = options.map {|o| o.id}
> > > > > v.save
>
> > > > > I also tried it just with v.options = options, using option_ids was
> > > > > just another attempt to make this work
>
> > > > > The size of options in this case is 47.  options_vehicles which is my
> > > > > join table will have 94 results exactly 2 of each one option.  So if
> > > > > the option_id = 6 and vehicle_id is 4 i have 6,4 in the join table
> > > > > twice.
>
> > > > > I am doing one thing a little odd, but i have no idea what's causing
> > > > > this issue.  My models look like this:
> > > > > Option.rb
> > > > >  set_primary_key "option_id"
> > > > >   has_many        :options_vehicles
> > > > >   has_many        :vehicles, :through => :options_vehicles
>
> > > > > I have to use option_id as the primary key and it's a string.  This is
> > > > > other data i'm importing and I can't change the way it's organzied.
>
> > > > > Vehicle.rb
> > > > >   has_many        :options_vehicles,
> > > > >   has_many        :options, :through => :options_vehicles
>
> > > > > My join table looks like a habtm table because it was.  I have tried
> > > > > this both ways activerecord continues to put in dupes.
>
> > > > > I actually went into the code at
> > > > > /data/www/production/vendor/rails/activerecord/lib/active_record/
> > > > > associations.rb:1392
> > > > > and put prints in there and see it showing the size of the records to
> > > > > save as 47, but it's going through here twice.
>
> > > > > I have option_id in options marked as the primary key with a unique
> > > > > index in mysql.
>
> > > > > Any help would be appreciated I feel like I'm going crazy...
> > > > >Erik
>
> > > > You don't need to do the Options.find because you already have
> > > > t.options. This may also explain the dupes.
>
> > > > -eric
--~--~---------~--~----~------------~-------~--~----~
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 [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to