I have a table called category and i want to show only the records where "status = A" in my list.erb currently, my list.erb shows all records from category table. but, i would like to show only the records where status = ''A'' for example: select * frm category where status = ''A'' the idea behind this is, i have this status column to show only the active records. This status flag accepts, "A" for active, "I" for inative and "R" for "Requested newly, but not yet processed". .. and may be others as per the futurre needs. so how can i apply this filter of where status = ''A'' in my controller. def list @categories=Category.find_all_categories end - thanks, radha -- 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
RailsFan Radha wrote:> > I have a table called category and i want to show only the records where > "status = A" in my list.erb > > currently, my list.erb shows all records from category table. > but, i would like to show only the records where status = ''A'' > > for example: > select * frm category where status = ''A'' > > the idea behind this is, i have this status column to show only the > active records. > This status flag accepts, > "A" for active, > "I" for inative and > "R" for "Requested newly, but not yet processed". > .. and may be others as per the futurre needs. > > so how can i apply this filter of where status = ''A'' in my controller. > > def list > @categories=Category.find_all_categories > end > > > > - thanks, > radhaAdded another method to the model, def self.find_active_categories find_by_sql("SELECT * from category where status = ''A'') order by category_id ") end And changed the controller, list action to call this new method. def list @categories=Category.find_active_categories end And this seems to be working. Let me know if i have missed any or please add any additional info which this implies too. - thanks, radha. -- 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Does this mean, that always create a method and call that in the controller? Even for find(:all) ? Is this the best practice? - thanks, radha -- 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
On 29 June 2010 02:56, RailsFan Radha <lists-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> > I have a table called category and i want to show only the records where > "status = A" in my list.erb > > currently, my list.erb shows all records from category table. > but, i would like to show only the records where status = ''A'' > > for example: > select * frm category where status = ''A'' > > the idea behind this is, i have this status column to show only the > active records. > This status flag accepts, > "A" for active, > "I" for inative and > "R" for "Requested newly, but not yet processed". > .. and may be others as per the futurre needs. > > so how can i apply this filter of where status = ''A'' in my controller. > > def list > @categories=Category.find_all_categories > end >I think it would be worth your while working through some tutorials and guides. Have a look at the guides at http://guides.rubyonrails.org/ for a start. Agile Development with Rails is an excellent book. The tutorial at http://www.railstutorial.org/ is good. Make sure that any tutorial you try is for rails 2.3. For your particular problem I would suggest using named_scope. Colin -- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@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.
On 29 June 2010 03:19, RailsFan Radha <lists-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote:> RailsFan Radha wrote: >> >> I have a table called category and i want to show only the records where >> "status = A" in my list.erb >> >> currently, my list.erb shows all records from category table. >> but, i would like to show only the records where status = ''A'' >> >> for example: >> select * frm category where status = ''A'' >> >> the idea behind this is, i have this status column to show only the >> active records. >> This status flag accepts, >> "A" for active, >> "I" for inative and >> "R" for "Requested newly, but not yet processed". >> .. and may be others as per the futurre needs. >> >> so how can i apply this filter of where status = ''A'' in my controller. >> >> def list >> @categories=Category.find_all_categories >> end >> >> >> >> - thanks, >> radha > > > Added another method to the model, > > def self.find_active_categories > find_by_sql("SELECT * from category > where status = ''A'') > order by category_id ") > endDon''t use find_by_sql unless absolutely necessary. The above can be done by using the :conditions and :order options in find. Also as I suggested previously, I would use a named scope (with default_scope for the order if you will always sort by the same thing).> > And changed the controller, list action to call this new method. > > def list > @categories=Category.find_active_categories > end > > And this seems to be working. > Let me know if i have missed any or please add any additional info which > this implies too.Do you always want to just show active categories on the index? If so then that concept is ok (subject to comments above). Colin -- 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-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@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.
Colin Law wrote:> On 29 June 2010 03:19, RailsFan Radha <lists-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote: >>> >>> � def list >> >> �def self.find_active_categories >> � � �find_by_sql("SELECT * from category >> � � � � � where status = ''A'') >> � � �order by category_id ") >> �end > > Don''t use find_by_sql unless absolutely necessary. The above can be > done by using the :conditions and :order options in find. Also as I > suggested previously, I would use a named scope (with default_scope > for the order if you will always sort by the same thing). > >> >> And changed the controller, list action to call this new method. >> >> � def list >> � � � @categories=Category.find_active_categories >> � end >> >> And this seems to be working. >> Let me know if i have missed any or please add any additional info which >> this implies too. > > Do you always want to just show active categories on the index? If so > then that concept is ok (subject to comments above). > > ColinThanks for ur response Colin. (I have earlier posted a solution using find_by_sql for this problem) What is the bext practice in this case? (Yes, I always want to show the active records only ). Using find_by_sql or using a condition in the find :all ? ( I like SQLs, but as far as the performance goes which approach is better? ) Can someone throw light in this please? - thanks -- 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@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.
An update to this post: Here, i''m trying to figure out which is the better approach or best practice to show only active categories records from the category table. Also, i want to prevent any SQL injection. Do u think, using find_by_sql approach could protect the page from sql injection to view all categories? thanks, radha RailsFan Radha wrote:> > > Colin Law wrote: >> On 29 June 2010 03:19, RailsFan Radha <lists-fsXkhYbjdPsEEoCn2XhGlw@public.gmane.org> wrote: >>>> >>>> � def list >>> >>> �def self.find_active_categories >>> � � �find_by_sql("SELECT * from category >>> � � � � � where status = ''A'') >>> � � �order by category_id ") >>> �end >> >> Don''t use find_by_sql unless absolutely necessary. The above can be >> done by using the :conditions and :order options in find. Also as I >> suggested previously, I would use a named scope (with default_scope >> for the order if you will always sort by the same thing). >> >>> >>> And changed the controller, list action to call this new method. >>> >>> � def list >>> � � � @categories=Category.find_active_categories >>> � end >>> >>> And this seems to be working. >>> Let me know if i have missed any or please add any additional info which >>> this implies too. >> >> Do you always want to just show active categories on the index? If so >> then that concept is ok (subject to comments above). >> >> Colin > > > > Thanks for ur response Colin. (I have earlier posted a solution using > find_by_sql for this problem) > > > What is the bext practice in this case? (Yes, I always want to show the > active records only ). > Using find_by_sql or using a condition in the find :all ? ( I like SQLs, > but as far as the performance goes which approach is better? ) > > > Can someone throw light in this please? > > - thanks-- 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@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.
RailsFan Radha wrote: [...]> What is the bext practice in this case? (Yes, I always want to show the > active records only ). > Using find_by_sql or using a condition in the find :all ? ( I like SQLs, > but as far as the performance goes which approach is better? )The performance is probably equivalent. The maintainability, however, is not. find_by_sql locks your code to one DB server and makes it less maintainable. *Do not* use find_by_sql unless you have no other choice -- write your code with ActiveRecord find syntax whenever possible.> > > Can someone throw light in this please? > > - thanksBest, -- Marnen Laibow-Koser http://www.marnen.org marnen-sbuyVjPbboAdnm+yROfE0A@public.gmane.org -- 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
thanks Marnen. this is exactly what i as looking for. Your answer is informative and it explains why i should avoid writing sqls in it. thanks again. -radha. Marnen Laibow-Koser wrote:> RailsFan Radha wrote: > [...] >> What is the bext practice in this case? (Yes, I always want to show the >> active records only ). >> Using find_by_sql or using a condition in the find :all ? ( I like SQLs, >> but as far as the performance goes which approach is better? ) > > The performance is probably equivalent. The maintainability, however, > is not. find_by_sql locks your code to one DB server and makes it less > maintainable. *Do not* use find_by_sql unless you have no other choice > -- write your code with ActiveRecord find syntax whenever possible. > >> >> >> Can someone throw light in this please? >> >> - thanks > > Best, > -- > Marnen Laibow-Koser > http://www.marnen.org > marnen-sbuyVjPbboAdnm+yROfE0A@public.gmane.org-- 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 rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.