this is my first application in RoR and am kind of stuck. part of my confusion is where/when to use the model, controller or view. one of my tables is called gi_maps which is basically a hash: sqlite> select * from gi_maps; id|name 1|Gi 2|No-Gi another is called divisions which has gi_maps hash and others: sqlite> select * from divisions; id|gi_map_id|rank_map_id|weight_group_map_id|age_group_map_id| created_at|updated _at 3|2|4|4|3|2008-09-05 21:28:32|2008-09-05 21:28:32 4|1|6|4|3|2008-09-05 21:29:01|2008-09-05 21:29:01 my default show "view" (divisions/show.html.erb) just displays the id''s for each entry: Gi or No-Gi Rank Weight group Age group 2 4 4 3 Show Edit Destroy 1 6 4 3 Show Edit Destroy divisions/show.html.erb: . . <p> <b>Gi or No-Gi:</b> <%=h @division.gi_map_id %> </p> . . . so all of this works fine... except for the fact that people like to see words instead of numbers :) so what i''ve tried to do is use my model (models/division.rb) to "collect" the corresponding "name" value for a given hash id (ie. gi_map_id). but for some reason this isn''t working and i can''t think of any other way to do it except for placing it in the controller or view section. but i *think* this should be done at the model level. here are the files and errors the way i''m doing it (i''ll truncate the files for readability): models/gi_map.rb: class GiMap < ActiveRecord::Base belongs_to :divison end models/division.rb: class Division < ActiveRecord::Base belongs_to :match def self.gi_map_name GiMap.first(:conditions => ["id = ?", self.id]).name end end controllers/divisions_controller.rb: . . def show @division = Division.find(params[:id]) respond_to do |format| format.html # show.html.erb format.xml { render :xml => @division } end end . . views/divisons/show.html.rb: . . <p> <b>Gi or No-Gi:</b> <%=h @division.gi_map_name %> </p> . . . and here is the error when trying to "show" one record: NoMethodError in Divisions#show Showing divisions/show.html.erb where line #3 raised: undefined method `gi_map_name'' for #<Division:0x478b9b0> Extracted source (around line #3): 1: <p> 2: <b>Gi or No-Gi:</b> 3: <%=h @division.gi_map_name %> 4: </p> 5: 6: <p> i hope this isn''t a total noob question! but i''ve already written this application in php/mysql and am just rewriting in an effort to learn RoR. so any help or tips would be greatly appreciated. thanks! ron --~--~---------~--~----~------------~-------~--~----~ 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Defining methods with the self prefix denotes a class method. You are calling the method on an instance object. Remove the self and you will be good to go. On Sat, Sep 6, 2008 at 1:36 PM, Ron DeMeritt <rdemeritt-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > this is my first application in RoR and am kind of stuck. part of my > confusion is where/when to use the model, controller or view. > > > one of my tables is called gi_maps which is basically a hash: > > sqlite> select * from gi_maps; > id|name > 1|Gi > 2|No-Gi > > > another is called divisions which has gi_maps hash and others: > > sqlite> select * from divisions; > id|gi_map_id|rank_map_id|weight_group_map_id|age_group_map_id| > created_at|updated > _at > 3|2|4|4|3|2008-09-05 21:28:32|2008-09-05 21:28:32 > 4|1|6|4|3|2008-09-05 21:29:01|2008-09-05 21:29:01 > > > my default show "view" (divisions/show.html.erb) just displays the > id''s for each entry: > > Gi or No-Gi Rank Weight group Age group > 2 4 4 3 Show Edit Destroy > 1 6 4 3 Show Edit Destroy > > divisions/show.html.erb: > . > . > <p> > <b>Gi or No-Gi:</b> > <%=h @division.gi_map_id %> > </p> > . > . > . > > > so all of this works fine... except for the fact that people like to > see words instead of numbers :) so what i''ve tried to do is use my > model (models/division.rb) to "collect" the corresponding "name" value > for a given hash id (ie. gi_map_id). but for some reason this isn''t > working and i can''t think of any other way to do it except for placing > it in the controller or view section. but i *think* this should be > done at the model level. > > here are the files and errors the way i''m doing it (i''ll truncate the > files for readability): > > > models/gi_map.rb: > > class GiMap < ActiveRecord::Base > belongs_to :divison > end > > > > models/division.rb: > > class Division < ActiveRecord::Base > > belongs_to :match > > def self.gi_map_name > GiMap.first(:conditions => ["id = ?", self.id]).name > end > end > > > > controllers/divisions_controller.rb: > . > . > def show > @division = Division.find(params[:id]) > > respond_to do |format| > format.html # show.html.erb > format.xml { render :xml => @division } > end > end > . > . > > > > views/divisons/show.html.rb: > . > . > <p> > <b>Gi or No-Gi:</b> > <%=h @division.gi_map_name %> > </p> > . > . > . > > > and here is the error when trying to "show" one record: > > > NoMethodError in Divisions#show > > Showing divisions/show.html.erb where line #3 raised: > > undefined method `gi_map_name'' for #<Division:0x478b9b0> > > Extracted source (around line #3): > > 1: <p> > 2: <b>Gi or No-Gi:</b> > 3: <%=h @division.gi_map_name %> > 4: </p> > 5: > 6: <p> > > > i hope this isn''t a total noob question! but i''ve already written > this application in php/mysql and am just rewriting in an effort to > learn RoR. so any help or tips would be greatly appreciated. > > thanks! > > ron > > > >--~--~---------~--~----~------------~-------~--~----~ 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On Sep 6, 5:36 pm, Ron DeMeritt <rdemer...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> this is my first application in RoR and am kind of stuck. part of my > confusion is where/when to use the model, controller or view. > >class Division < ActiveRecord::Base> > belongs_to :match > > def self.gi_map_name > GiMap.first(:conditions => ["id = ?", self.id]).name > end > endYou''ve created a class method (that''s what def self. does) whereas this should really be an instance method. Usually you''d handle this via some associations. GiMap should have has_one :division (and not belongs_to :division - that would indicate that the gi_maps table has a division_id column) and division should belongs_to :gi_map (and it does as required have a gi_map_id column). Then you''d just write (I suspect that personally I wouldn''t bother) def gi_map_name gi_map.name end Fred --~--~---------~--~----~------------~-------~--~----~ 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
wow! i was pretty far off :) thanks for the tips! i would like to know more about when/where and what the implications are for using the has_one, belongs_to, etc. keywords. any links that would help me better understand what the hell i''m doing ? :) btw... i DO get what you are saying... after changing the belongs_to and has_one... i can just do this in my view: <p> <b>Gi or No-Gi:</b> <%=h @division.gi_map.name %> </p> thanks again! On Sep 6, 12:53 pm, Frederick Cheung <frederick.che...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> On Sep 6, 5:36 pm, Ron DeMeritt <rdemer...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> this is my first application in RoR and am kind of stuck. part of my > > confusion is where/when to use the model, controller or view. > > class Division < ActiveRecord::Base > > > > > belongs_to :match > > > def self.gi_map_name > > GiMap.first(:conditions => ["id = ?", self.id]).name > > end > > end > > You''ve created a class method (that''s what def self. does) whereas > this should really be an instance method. > Usually you''d handle this via some associations. GiMap should have > has_one :division (and not belongs_to :division - that would indicate > that the gi_maps table has a division_id column) and division should > belongs_to :gi_map (and it does as required have a gi_map_id column). > > Then you''d just write (I suspect that personally I wouldn''t bother) > > def gi_map_name > gi_map.name > end > > Fred--~--~---------~--~----~------------~-------~--~----~ 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
http://railscasts.com/episodes/3-find-through-association On Sep 6, 12:18 pm, Ron DeMeritt <rdemer...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> wow! i was pretty far off :) thanks for the tips! i would like to > know more about when/where and what the implications are for using the > has_one, belongs_to, etc. keywords. any links that would help me > better understand what the hell i''m doing ? :) > > btw... i DO get what you are saying... after changing the belongs_to > and has_one... i can just do this in my view: > > <p> > <b>Gi or No-Gi:</b> > <%=h @division.gi_map.name %> > </p> > > thanks again! > > On Sep 6, 12:53 pm, Frederick Cheung <frederick.che...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> > wrote: > > > On Sep 6, 5:36 pm, Ron DeMeritt <rdemer...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> this is my first application in RoR and am kind of stuck. part of my > > > confusion is where/when to use the model, controller or view. > > > class Division < ActiveRecord::Base > > > > belongs_to :match > > > > def self.gi_map_name > > > GiMap.first(:conditions => ["id = ?", self.id]).name > > > end > > > end > > > You''ve created a class method (that''s what def self. does) whereas > > this should really be an instance method. > > Usually you''d handle this via some associations. GiMap should have > > has_one :division (and not belongs_to :division - that would indicate > > that the gi_maps table has a division_id column) and division should > > belongs_to :gi_map (and it does as required have a gi_map_id column). > > > Then you''d just write (I suspect that personally I wouldn''t bother) > > > def gi_map_name > > gi_map.name > > end > > > Fred--~--~---------~--~----~------------~-------~--~----~ 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---