Hello, I am trying to do something and I've been reading my Agile Web Development with Rails book and doing internet searches for several hours now and I have made no progress. Here's the issue: I have a table of sales reps that is linked to a table of territories. There are around a thousand territories that are numbered and each sales reps has many territories. I will be storing the sales rep id in the territory table to associate the two tables. I have not been specifying a "belongs to" and "has_many" relationship in my models because I need to be able to take a range of territories (for example 34-79) and since there are so many territories, I need to do this with text fields and not an enormous select list. I believe it will be easier for me to do this by writing custom methods and then doing custom SQL that will associate the territories after_create. To accept the data, my form has multiple groups of two text fields each. This should allow the user to enter a range of territories (43-49) as well as a single territory by leaving the second field blank. I will have 9 groups of these text field combinations to allow the user to enter many territories or ranges of territories. I know what I want to do in my mind, but I can't get past step one. It has brought up some simple questions that I hope someone can answer: 1) How do I declare a variable (attribute?) in a model that doesn't directly correlate to a database column? 2) How do I declare a two dimensional array in a model so that I can receive data from a form in an array? If it helps clarify what I am trying to do, here is what I think my HTML should look like: ________________________________________ <%= text_field("sales_rep", "territories", :size => 6) %> - <%= text_field("sales_rep", "territories", :size => 6) %> <br> <%= text_field("sales_rep", "territories", :size => 6) %> - <%= text_field("sales_rep", "territories", :size => 6) %> <br> <%= text_field("sales_rep", "territories", :size => 6) %> - <%= text_field("sales_rep", "territories", :size => 6) %> ________________________________________ This of course gives me a "undefined method `territories' for #<SalesRep:0xb76bc074>" error because there is no territories attribute in my model. I try to declare it in my model like this (and around 12 variations of this which are all apparently incorrect): ________________________________________ attr_accessible :self.territories def initialize self.territories = " " self.territories = " " self.territories = " " self.territories = " " self.territories = " " self.territories = " " end ________________________________________ but I'm not sure how I am supposed to declare a two dimensional array in my model so I can receive data from a form.
on 2006-05-09 02:08
on 2006-05-09 02:42
I've written something similar to this a while back, but not using Ruby/Rails. Mapping it across to your application, the approach I used was to have a single text field named "territory_list", and users would enter something like "1,2,6-13,23-34,50,97" into it, indicating that the sales rep was responsible for this set of territories. First, the users liked it - it was analogous to how they select ranges of pages to print in MS Word, so they were familiar with the concept. Second, it fit into a small section of screen area, and didn't dominate the page. As there was a bunch of other content to fit on that same page, this was a good thing. It's not difficult to parse out such a field into its underlying values (i.e. 1,2,6,7,8,9,10,11,12,13,23,24,...) and then update your database appropriately. It's a bit more difficult to read existing data out of the database and re-create such a list for update purposes, but it's not complex as much as annoying... I would definitely include the has_many/belongs_to relationship in your model. Although you might not be using it for entering and maintaining the linkage, I can see it'd be very useful to have an AJAX-style div onscreen that shows the names of the territories (in semi real time) as a user is entering in their corresponding numbers. There may also be other interface requirements that appear later - maybe some/all of your users find they'd rather type in the first few letters of the territory name and have it appear for them, because they can't remember the numeric codes of several hundred territories. These both strike me as particularly useful uses of the AJAX stuff that Rails brings to the party. Good luck Dave M.