Alright, noob here, etc. etc. Trying to figure out the has_many usage. If I understand correctly, when you declare that a table/class has_many whatevers, the rails assumption is that there will be a foreign key in the whatevers table pointing back to the ''id'' primary key in the first table. This doesn''t seem to be the only way to have a ''has_many'' relationship, and I can''t seem to get override the rails assumptions for my tables. I have two tables, ''properties'' and ''jurisdiction_rates''. class CreateProperties < ActiveRecord::Migration def self.up create_table :properties do |t| t.column :address, :string t.column :jurisdiction_id, :string end end class CreateJurisdictionRates def self.up create_table :jurisdiction_rates do |t| t.column :jurisdiction_id, :string t.column :tax_rate, :string t.column :type, :string end end Rails of course sets up auto incrementing ''id'' columns on both tables. Now there are many properties in the same tax jurisdiction that will have the same rates applied to them, so all properties in ''jurisidiction_id'' = 999 have up to three tax ''type'' (e.g. state, county and local) associated with them. Clearly, I''d prefer to have the ''jurisdiction_id'' in ''properties'' join to ''jurisdiction_rates.jurisdiction_id'' rather than a ''properties_id'', since if I did it the latter way, I''d have millions of records (three tax rates entries for each property ''id'', rather than 200 records for each jurisdiction ''id''). Using a habtm also seems like overkill. Am I just not thinking about my table design intelligently? Or is there some way to get rails to play with this structure? I''ve tried to use: class Property < ActiveRecord::Base has_many :jurisdiction_rates, :foreign_key => "jurisdiction_id" end class JurisdictionRates < ActiveRecord::Base belongs_to :properties, :foreign_key => "jurisdiction_id" end This doesn''t seem to work at all. I can''t figure out how to tell rails to use the ''jurisdiction_id'' on both tables to do the join. Any thoughts? Maybe I just need some sleep and my mistakes will be obvious. jsma -- Posted via http://www.ruby-forum.com/.
I am not sure I fully understand your schema, but at first sight it does look like a habtm situation, with a join table in between, as in the following (pseudocode): create_table :properties column :address, :string create_table :properties_rates column :property_id, :integer column :rate_id, :integer create_table :rates column :jurisdiction, :string column :tax_rate, :string column :type, :string If, however, you need to attach more information to the jurisdiction, then jurisdictions should be its own model: create_table :properties column :address, :string column :jurisdiction_id, :integer create_table :jurisdictions column :label, :string column :some_other_info, :text create_table :rates column :jurisdiction_id, :integer column :tax_rate, :string column :type, :string in the Property class, you would then use: has_many :rates, :through => :jurisdictions Again, this may or may not make sense depending on if I understand correctly your problem... :-) Cheers, Giuseppe John-scott Atlakson wrote:> Rails of course sets up auto incrementing ''id'' columns on both tables. > Now there are many properties in the same tax jurisdiction that will > have the same rates applied to them, so all properties in > ''jurisidiction_id'' = 999 have up to three tax ''type'' (e.g. state, county > and local) associated with them.-- Posted via http://www.ruby-forum.com/.
Well maybe jurisdiction/tax rates question is obscure, but the situation seems to be the same if we think instead of ''zip/postal'' codes. If the zip/postal codes had multiple attributes in a ''zips/postal codes'' table (perhaps census statistics), would it make sense to strip out ''zip/postal code'' from ''properties'', and make a habtm relationship? This doesn''t seem reasonable to me. You would have millions of records in the join table just to reattach the zips to the properties. It would make more sense to leave the zip codes in the properties table and then link these zip codes to zero or more rows in a zip-code attributes table (which may only actually total a couple of hundred rows). I guess the main difference is that although each property can have many attributes through the zip (or in my case jurisdiction code), the property only ever has one zip/jurisdiction code attached to it, not ''many''. Currently, I can successfully look up the rates in my current setup (which is an ungodly Zope ZPT/DTML/SQL frankenstein) doing the table join in raw sql. I inherited the zope mess and it''s unfortunately all I know right now. But I''m trying to learn a ''reasonable'' framework so I can more easily get stuff done. So maybe my questions are misplaced since I may be trying to cram my frankenstein into the ''rails way''. Anyway, thanks for your feedback and taking the time to respond. Hope this clarifies my own thinking a little and perhaps suggests new ways to solve this problem? Giuseppe Bertini wrote:> I am not sure I fully understand your schema, but at first sight it does > look like a habtm situation, with a join table in between, as in the > following (pseudocode): > > create_table :properties > column :address, :string > > create_table :properties_rates > column :property_id, :integer > column :rate_id, :integer > > create_table :rates > column :jurisdiction, :string > column :tax_rate, :string > column :type, :string > > If, however, you need to attach more information to the jurisdiction, > then jurisdictions should be its own model: > > create_table :properties > column :address, :string > column :jurisdiction_id, :integer > > create_table :jurisdictions > column :label, :string > column :some_other_info, :text > > create_table :rates > column :jurisdiction_id, :integer > column :tax_rate, :string > column :type, :string > > in the Property class, you would then use: > has_many :rates, :through => :jurisdictions > > Again, this may or may not make sense depending on if I understand > correctly your problem... :-) > > Cheers, > Giuseppe >-- Posted via http://www.ruby-forum.com/.
Hi, I need to use link_to_remote, but I want to add some values from form to the :url - is that possible? Have a large form, and really don''t want to send it all over AJAX - with form_remote_tag - just to check one phone number.. is there any solution? thx -- /znouza
Tom Z Meinlschmidt <tomas@...> writes:> Hi, > > I need to use link_to_remote, but I want to add some values from form to > the :url - is that possible? Have a large form, and really don''t want to > send it all over AJAX - with form_remote_tag - just to check one phone > number..You have a couple choices, passing params in the URL: <%= link_to_remote(image_tag("sort_down_12x11.gif", :border => 0), { :complete => visual_effect(:pulsate, "#{container_id}", :duration => 0.5), :url => url_for(:action => "answer_swap", :params => (:answer => idx, :direction => 1)) }) %> or using :with: <%= link_to_remote(image_tag("add_30x30.jpg", :border => 0), { :complete => visual_effect(:pulsate, "#{container_id}", :duration => 0.5), :url => url_for(:action => "answer_add", :params => pr_values), :with => "''answer='' + $F(''an_answer'')" }) %>