Hi All, I am beginning to think that mt brain doesnt speak Ruby(or rails)! I am attempting to build the most basic search function imaginable - Search within the database for a particular location Controller @locations = Location.find(:all, :conditions => ["location like ?", "%#{@search_text}%"]) In my view I just put my basic scaffolded view from show, reasoing that this should return that exact result View <h2>Find Results</h2> <% for column in Location.content_columns %> <p> <b><%= column.human_name %>:</b> <%=h @location.send(column.name) %> </p> <% end %> Help how do I resolve basic results like this? More properly I know it should return a table of all the close matches, but anything other than nasty NOMethoError# would be great! --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
First of, this find looks much cleaner and is more scure as everything is escaped by Rails: @locations = Location.find(:all, :conditions => ["location like %?%", @search_text]) For the view: forget that scaffold stuff, it keeps you from learning how to do it yourself. in your current view, you loop through the Models *column headers* and not the returned results in @location. <%=h @location.send(column.name) %> will therefore not return each results content, but throw an error i guess ... not too fit in ruby myself, but been i while since touched scaffold for the reason mentioned above. <h2>Search Results</h2> <% @locations.each do |loc| %> <p> <b><%= loc.location %></b> </p> <%end%> ...something like this, errors to be expected :-D Note: i''m kind of new to Rails too so maybe my explanations where plain bullshit. Excuse me. --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
Thanks! For whatever reason my last post didnt show up! Here is where I am with this now. The ''Location like %?%....'' Would result in a MySQL error like Mysql::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''%''Hicom Room''%)'' So the wildcards are on the wrong side of the quotes If I hard code @search_text = ''Hicom Room'' and take the wildcards out it works fine So... one step close I guess! On Oct 25, 10:38 am, "Thorsten L" <duple...-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org> wrote:> First of, this find looks much cleaner and is more scure as everything > is escaped by Rails: > > @locations = Location.find(:all, :conditions => ["location like %?%", > @search_text]) > > For the view: forget that scaffold stuff, it keeps you from learning > how to do it yourself. > in your current view, you loop through the Models *column headers* and > not the returned results in @location. > <%=h @location.send(column.name) %> will therefore not return each > results content, but throw an error i guess ... not too fit in ruby > myself, but been i while since touched scaffold for the reason > mentioned above. > > <h2>Search Results</h2> > > <% @locations.each do |loc| %> > <p> > <b><%= loc.location %></b> > </p> > <%end%> > > ...something like this, errors to be expected :-D > > Note: i''m kind of new to Rails too so maybe my explanations where plain > bullshit. Excuse me.--~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
OK I done know if this is interesting to anyone esle, of if they can just shed some light on this. I hasd been using a helper as the input for my search string: <%= start_form_tag :action => ''find'' %> <%= text_field :search, :search %> <%=submit_tag ''Find'' %> This turned out to be the cause of the Mysql error below as it seemed to be adding whitespace and new line characters, as soon as I changed the filed to be : <%= start_form_tag :action => ''find'' %> <input id="search" name="search" value=""> <%=submit_tag ''Find''%> it worked straight away! Any suggestions? On Oct 25, 1:28 pm, "Armitage" <rod.middle...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Thanks! > > For whatever reason my last post didnt show up! > > Here is where I am with this now. > The ''Location like %?%....'' > > Would result in a MySQL error like > > Mysql::Error: You have an error in your SQL syntax; check the manual > that corresponds to your MySQL server version for the right syntax to > use near ''%''Hicom Room''%)'' > > So the wildcards are on the wrong side of the quotes > > If I hard code > @search_text = ''Hicom Room'' and take the wildcards out it works fine > So... one step close I guess! > > On Oct 25, 10:38 am, "Thorsten L" <duple...-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org> wrote: > > > First of, this find looks much cleaner and is more scure as everything > > is escaped by Rails: > > > @locations = Location.find(:all, :conditions => ["location like %?%", > > @search_text]) > > > For the view: forget that scaffold stuff, it keeps you from learning > > how to do it yourself. > > in your current view, you loop through the Models *column headers* and > > not the returned results in @location. > > <%=h @location.send(column.name) %> will therefore not return each > > results content, but throw an error i guess ... not too fit in ruby > > myself, but been i while since touched scaffold for the reason > > mentioned above. > > > <h2>Search Results</h2> > > > <% @locations.each do |loc| %> > > <p> > > <b><%= loc.location %></b> > > </p> > > <%end%> > > > ...something like this, errors to be expected :-D > > > Note: i''m kind of new to Rails too so maybe my explanations where plain > > bullshit. Excuse me.--~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---