I know this has been rehashed many times, but I don''t get it.
I can''t find it documented to were I understand all the parts. I can
make this work using Rails database design conventions, but in this case
I am not able to do that.
I find examples, but the ones I find do not follow the conventions.
They also do not give enough information to understand what is going on.
In the model:
What is the "association"? Is it the field name minus the _id?
:foreign_key is the key in the other table.
:class_name is the name of the model of the other table.
------createtables.sql
CREATE TABLE admins(
id INTEGER PRIMARY KEY,
admin VARCHAR(32) NOT NULL,
);
CREATE TABLE machines(
id INTEGER PRIMARY KEY,
padmin_id REFERENCES admins(admin),
sadmin_id REFERENCES admins(admin)
)
-------models/machine.rb------------
class Machine < ActiveRecord::Base
belongs_to :padmin, :class_name => "admin", :foreign_key =>
"id"
belongs_to :sadmin, :class_name => "admin", :foreign_key =>
"id"
end
-------models/admin.rb--------------
class Admin < ActiveRecord::Base
has_many :machines, :foreign_key => ''padmin_id''
has_many :machines, :foreign_key => ''sadmin_id''
end
-------views/_list_stripes.rhtml-----
If it were a straight association machine.admin_id and admin.id, then
this works
<td><%= list_stripes.admin ? list_stripes.admin["admin"] :
"UnAssigned"
%></td>
-------------------------------------
I would be happy if I could understand it well enough that I could use
it without the compilcation of "sadmin_id".
Blake
--
Posted via http://www.ruby-forum.com/.
I''m not sure i quite understand your data model... If it''s: "One admin can have many machines, One machine belongs to many admins" then you should have a joiner table: administrators administrators_machines machines -------------- ----------------------- -------- id <---- administrator_id |--> id admin machine_id -- machine -------------- ----------------------- --------- Your models will then reflect this relationship: class Machine < ActiveRecord::Base has_and_belongs_to_many :administrators end class Administrator < ActiveRecord::Base has_and_belongs_to_many :machines end Rails will automatically map everything together for you. The associations should be avaliable as a collection in the models: @administrator.machines.find(:all) Hopefully this will be helpful - i apologise if i''ve mis-understood your problem :0) Steve Blake Lewis wrote:> I know this has been rehashed many times, but I don''t get it. > I can''t find it documented to were I understand all the parts. I can > make this work using Rails database design conventions, but in this case > I am not able to do that. > I find examples, but the ones I find do not follow the conventions. > They also do not give enough information to understand what is going on. > > In the model: > What is the "association"? Is it the field name minus the _id? > :foreign_key is the key in the other table. > :class_name is the name of the model of the other table. > ------createtables.sql > CREATE TABLE admins( > id INTEGER PRIMARY KEY, > admin VARCHAR(32) NOT NULL, > ); > CREATE TABLE machines( > id INTEGER PRIMARY KEY, > padmin_id REFERENCES admins(admin), > sadmin_id REFERENCES admins(admin) > ) > -------models/machine.rb------------ > class Machine < ActiveRecord::Base > belongs_to :padmin, :class_name => "admin", :foreign_key => "id" > belongs_to :sadmin, :class_name => "admin", :foreign_key => "id" > end > -------models/admin.rb-------------- > class Admin < ActiveRecord::Base > has_many :machines, :foreign_key => ''padmin_id'' > has_many :machines, :foreign_key => ''sadmin_id'' > end > -------views/_list_stripes.rhtml----- > If it were a straight association machine.admin_id and admin.id, then > this works > <td><%= list_stripes.admin ? list_stripes.admin["admin"] : "UnAssigned" > %></td> > ------------------------------------- > I would be happy if I could understand it well enough that I could use > it without the compilcation of "sadmin_id". > > Blake > >
Steve,
I think you understand my data. I was trying to avoid habtm. I
haven''t found a way to associate data with each join. We have primary
and secondary admins for each machine.
habtm does not deal with this:
administrators administrators_machines machines
-------------- ----------------------- --------
id <---- administrator_id |--> id
admin machine_id -- machine
[primary | secondary]
-------------- ----------------------- ---------
In the mean time I would like to figure out the correct syntax for
describing the models and listing the data with just belongs_to and
has_many. I would drop the secondary admin out of the model. But instead
of renameing things I would like to know how to do it without following
rails naming conventions.
Does join through allow this type of model?
Blake
--
Posted via http://www.ruby-forum.com/.
Blake Lewis wrote:> Does join through allow this type of model? > > BlakeThe :through approach requires creating a new Model in ghe middle, say ''adminship'', so administrator has_many :adminships and has_many :machines :though => ''adminships'' and machine has_many :adminships and has_many :administrators :through => ''adminships''. The adminships table, in addition to administrayor_id and machine_id will have, say a priority column indicating primary or secondary The Adminship model would belongs_to :machine and belongs_to :administrator. More blurb here: http://blog.hasmanythrough.com/articles/2006/04/20/many-to-many-dance-off Does this help ? Alan -- Posted via http://www.ruby-forum.com/.