Colin, thanks so much for all your input. As you can see, I'm just muddling my way through all this, and all of your comments are very helpful. I will go through them more when I get to the office...
"remaining seats" = schedule.capacity - number of approved requests. So, if a schedule has a capacity of 10, and 8 requests with state_id = 3 (approved), then there are 2 available slots before the capacity reaches 0 and no more requests can be accepted. Can I do request.schedule as a find in 2.3.5 or is that a 3.0 feature? I used nitems because I didn't know any better. :) You've got me pointed in the right direction now - I'm new and messy, but I'm diggin it, so will keep pluggin away. Thanks again! Colin Law wrote: > On 1 September 2010 17:59, Charlie B99 <[email protected]> wrote: >> Hi all - >> >> Ruby 1.8.7 / Rails 2.3.5 > > I have not worked right through your code but have got some comments > that may help (or not). > >> I want to list all requests pending my approval, along with the >> remaining seats available. > > What is a seat? This is the first time you have mentioned it. > >> >> def listPendingRequest > > I would advise using the rails convention for naming things, so this > would be list_pending_requests > >> @allRequests = Request.find(:all, :conditions => ["state_id = ?", >> 2]).each{ >> |request| >> @schedule = Schedule.find(:first, :conditions => ["id = >> ?",request.schedule_id]) > > If the above is finding the schedule for request you don't need to do > a find, just use > @schedule = request.schedule. > >> @num = Request.find(:all, :conditions => ["state_id = ? AND schedule_id >> = ?", '3', @schedule.id]).nitems > > Now that you have a schedule, the requests for that schedule are > @schedule.requests, so you can do something like > @num = @schedule.requests.find(:all, "state_id = ?", 3).count > > Unless you need @num to be an instance variable of whatever class this > ends up in then just make it a simple variable - num > > Is there a reason why you are using nitems rather than count? > >> @remaining = @schedule.capacity - @num >> } > > You have now dropped out of the block. Note that you overwrote > @remaining each time round. so it will now have the value of the last > time round. I am not sure that the block contents have achieved > anything at all. > >> @request = Array.new > > If @request is going to contain a number of items call it @requests. > >> @allRequests.each do |r| >> if (r.state_id == 2 and r.approver_id == current_user.id) > > I am not sure what is going on here as I am running out of time. You > have not told us the relationships between Request and User. If you > find yourself using something.id then very often you just need to > setup the relationships in the right way and you can do the same sort > of thing as with schedules and requests above. So you may need > something like User has_many approved_requests with approver_id as the > foreign key, then User.approved_requests will give you the requests > that user has approved. > >> belongs in a model. �I don't know which model, though. > I suspect that it may be User method as it returns his pending > requests, but maybe not. Also consider whether this is really the > functionality you want. Often when the return from a method is > defined as returns something along with something else (as you have > done here) you actually want two separate methods. So maybe one that > gives the users unnaproved requests (which would be a User method > probably, and may have involve no code if you get the relationships > right) and a separate one to return remaining seats available > (whatever that means). > > >> >> Also, this method shows the remaining seats for the first schedule on >> all of the requests, regardless of which schedule is being requested. >> When I do a @schedule = Schedule.find(:all...), I get an error: >> "undefined method 'capacity' for Array". > > Does that only happen in the above code or do you mean that you just > cannot do Schedule.find(:all)? If you can do a simple find all then > gradually add bits to the working one till you get the problem. How > can the method be showing anything if you get that error? > > Sorry I have probably not been able to give this the thought it > deserves but maybe this will at least be of some help. > > Colin -- Posted via http://www.ruby-forum.com/. -- 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.

