Forum: Ruby on Rails Has Many Through + Join Model + Forms + Confused?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
2c65bb44acf33686d5d50ec733fd98cc?d=identicon&s=25 Matt Miller (Guest)
on 2006-05-24 19:54
(Received via mailing list)
Hello,

I'm trying to implement something like the following scenario.  I've got
"Alloys" (blends of metals), "Metals" and "Percentages"  I want to
implement
this using a join model, not using a has_and_belongs_to_many
relationship.
(If i'm wrong about that, let me know).

Basically, i have the following tables:

Metals
   id
   name

Alloys
   id
   name

Percentages
   alloy_id
   metal_id
   percent

And the following code in my models:

Alloy
  has_many :metals, :through => :percentages
  has_many :percentages, :dependent => true

Metal
  has_many :alloys, :through => :percentages
  has_many :percentages, :dependent => true

Percentage
  belongs_to :alloy
  belongs_to :metal

Now, I'm trying to make what boils down to an interface for people to
create
new alloys.  Alloys can have up to a predefined amount of metals (not
infinite, like tags, but it does need to be extendable, otherwise i
could go
for a less elegant database design and throw out all the relational
database
ideas.  In other words, i could just make the table "Alloys" have
Metal1,
Percentage1, Metal2, Percentage2, etc. as columns in the table).

Ok, so, what's the right way to do this?  I was hoping to be able to put
in,
say, 6 (where you can have 6 metals) select boxes, each listing all the
metals, and have 6 text fields to allow the user to type in the
percentage
of each.

Just as a start, i tried to do something like:

<%= select('alloy', 'NNNNN', Metal.find(:all, :order => "name").map
{|v| [
v.name, v.id]}) %>

where NNNNN is any number of things i've tried, all of which give me a
"NoMethodError in Alloys#new" error.

Am I on the fringes of rails?  Or am I so newb it hurts?  Any help would
be
appreciated.

-Matt Miller
16b26104470ae1b64958f3caa836c193?d=identicon&s=25 Danny Burkes (dburkes)
on 2006-05-24 23:31
What's this?  A HMT question without a lightning-fast response from
Josh, the Lord of the Joins?

Sorry, couldn't resist

:-)
2c65bb44acf33686d5d50ec733fd98cc?d=identicon&s=25 Matt Miller (Guest)
on 2006-05-25 00:12
(Received via mailing list)
I've "solved" the problem by essentially making an "Edit Metals List" on
my
Alloys listing page.  I map that into:

<%= link_to 'Edit Metals List', :controller => 'percentages', :action =>
'listfromalloy', :id => alloy %>

Then, the listfromalloy action is:

  def listfromalloy
    @alloy = Alloy.find(params[:id])
    @percentages = @alloy.percentages
  end

That essentially does the same thing as the standard "list" action, just
tells it to get only the metals already associated w/ that alloy.

This "works" but it requires that the user create an alloy, then create
the
associations.  I'd like this to be an "all in one" process, through one
form.  (I.e., the alloys "new" action / _form.rhtml has some drop downs
and
text boxes that let the user say what the associated percentages are)

Thanks!
-Matt Miller
This topic is locked and can not be replied to.