Hi
I am new to rails and programming and I want to contruct a search for
three things.
suburb
bedrooms
garage
I have tried various code without success
example
def results
@listings=ListingDetail.find(
:all,
:conditions =>["suburb_id = ? and bedroom_id= ? and
garage_id=?",
params[:suburb][:id],
params[:bedroom][:id],
params[:garage][:id]
]
)
end
the above code does not seem to cater the fact that Id 1 wants all the
results to be searched
suburb_id name
1 all
2 aeroglen
3 whitfield
4 edehill
If ID 1 is returned the search all suburbs
else
suburb only
I also tried
def results
suburb_id=params[:suburb][:id]
if suburb_id==1
@listings=ListingDetail.find_by_suburb_id(:all)
else
@listings=ListingDetail.find_all_by_suburb_id(suburb_id)
end
bedroom_id=params[:bedroom][:id]
if bedroom_id==1
@listings=ListingDetail.find_by_bedroom_id(:all)
else
@listings=ListingDetail.find_all_by_bedroom_id(bedroom_id)
end
garage_id=params[:garage][:id]
if garage_id==1
@listings=ListingDetail.find_by_garage_id(:all)
else
@listings=ListingDetail.find_all_by_bedroom_id(garage_id)
end
end
The above produces the following error
undefined method `each'' for #<ListingDetail:0x46e89e0>
The code in the results.rhtml is
1: <ul>
2: <% for listings in @listings %>
3: <li><%=listings.descriptionthumb %></li>
4: <% end %>
5: </ul>
Any ideas?
Martin
--
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-/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
-~----------~----~----~----~------~----~------~--~---
you know how to use breakpoint . If yes then try using breakpoint like
following.Also what is :all its not a variable rt?
def results
suburb_id=params[:suburb][:id]
if suburb_id==1
@listings=ListingDetail.find_by_suburb_id(:all)
else
@listings=ListingDetail.find_all_by_suburb_id(suburb_id)
end
bedroom_id=params[:bedroom][:id]
if bedroom_id==1
@listings=ListingDetail.find_by_bedroom_id(:all)
else
@listings=ListingDetail.find_all_by_bedroom_id(bedroom_id)
end
garage_id=params[:garage][:id]
if garage_id==1
@listings=ListingDetail.find_by_garage_id(:all)
else
@listings=ListingDetail.find_all_by_bedroom_id(garage_id)
end
breakpoint @listings
end
--
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-/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
-~----------~----~----~----~------~----~------~--~---
Hi Abhi
I tried the code again with breakpointer
C:\web\week5\property>ruby script/breakpointer
Executing break point [#<ListingDetail:0x47906a4
@attributes={"city"=>"Cairns",
"address1"=>"111", "status"=>"New
Listing", "pic1"=>nil,
"address2"=>"Reservoir
Rd", "pic2"=>nil, "bath"=>nil,
"postcode"=>"4978",
"price"=>"199000",
"pic3"=>nil, "study"=>nil,
"suburb_id"=>"21", "pic4"=>nil,
"lounge"=>nil, "descriptionfull"=>nil,
"descriptionthumb"=>"1 Bedroom
House ", "id"=>"4", "area"=>nil,
"pricety
pe"=>"Fixed Price", "house_type"=>nil,
"user_id"=>nil, "garage_id"=>"1",
"bedroo
m_id"=>"1", "state"=>nil,
"pool"=>nil}>] at
./script/../config/../app/controller
s/admin/listing_details_controller.rb:74 in `results''
irb(#<Admin::ListingDetailsController:0x47c7e38>):001:0>
also in the server i found this
Processing ListingDetailsController#results (for 127.0.0.1 at 2007-11-12
15:49:59) [POST]
Session ID: 19b7d1ef945a6956a1467df97540cf1c
Parameters: {"garage"=>{"id"=>"1"},
"commit"=>"Search",
"action"=>"results",
"suburb"=>{"id"=>"1"},
"bedroom"=>{"id"=>"1"},
"controller"=>"admin/listing_details"}
←[4;35;1mListingDetail Columns (0.000000)←[0m ←[0mSHOW FIELDS FROM
listing_details←[0m
←[4;36;1mListingDetail Load (0.000000)←[0m ←[0;1mSELECT * FROM
listing_details WHERE (listing_details.`suburb_id` = ''1'') ←[0m
←[4;35;1mListingDetail Load (0.000000)←[0m ←[0mSELECT * FROM
listing_details WHERE (listing_details.`bedroom_id` = ''1'')
←[0m
←[4;36;1mListingDetail Load (0.000000)←[0m ←[0;1mSELECT * FROM
listing_details WHERE (listing_details.`bedroom_id` = ''1'')
←[0m
etails.`bedroom_id` = ''1'') ←[0m
What i dont understand is why does it not seach for all records in
suburb as it has the paramter of 1 returned.
Martin
--
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-/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
-~----------~----~----~----~------~----~------~--~---
I think this is because as your last piece of code is this
if garage_id==1
@listings=ListingDetail.find_by_garage_id(:all)
else
@listings=ListingDetail.find_all_by_bedroom_id(garage_id)
end
the value of @listings will be ListingDetail.find_by_garage_id(:all) or
ListingDetail.find_all_by_bedroom_id(garage_id) as you haven''t appended
the earlier values you are actually overwriting the value of listings
Try using query for all these requirements then
ListingDetail.find_by_garage_id(:all,:conditions[query])
--
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-/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
-~----------~----~----~----~------~----~------~--~---
not quite sure i follow what you mean by
ListingDetail.find_by_garage_id(:all,:conditions[query])
I tried
garage_id=params[:garage][:id]
if garage_id==1
@listings=ListingDetail.find_by_garage_id(:all,:conditions[query])
else
@listings=ListingDetail.find_all_by_bedroom_id(garage_id)
with no success
Martin
--
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-/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
-~----------~----~----~----~------~----~------~--~---
This is not the way first of all tell me do you wish to have search result which satisfies all the three condition or do you wish to have search result that satisfies any of the three conditions -- 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-/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 -~----------~----~----~----~------~----~------~--~---
Abhi Manyu wrote:> This is not the way > first of all tell me > do you wish to have search result which satisfies all the three > condition or > do you wish to have search result that satisfies any of the three > conditionshere this def results @listings=ListingDetail.find( :all, :conditions =>["suburb_id = ? and bedroom_id= ? and garage_id=?", params[:suburb][:id], params[:bedroom][:id], params[:garage][:id] ] ) end means that you wish to have search result which satisfies all the three condition and this def results suburb_id=params[:suburb][:id] if suburb_id==1 @listings=ListingDetail.find_by_suburb_id(:all) else @listings=ListingDetail.find_all_by_suburb_id(suburb_id) end bedroom_id=params[:bedroom][:id] if bedroom_id==1 @listings=ListingDetail.find_by_bedroom_id(:all) else @listings=ListingDetail.find_all_by_bedroom_id(bedroom_id) end garage_id=params[:garage][:id] if garage_id==1 @listings=ListingDetail.find_by_garage_id(:all) else @listings=ListingDetail.find_all_by_bedroom_id(garage_id) end end means that you wish to have search result that satisfies any of the three conditions -- 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-/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 -~----------~----~----~----~------~----~------~--~---
there is another way also
you have to initialize an array
def results
@lists = Array.new
suburb_id=params[:suburb][:id]
if suburb_id==1
@listings=ListingDetail.find_by_suburb_id(:all)
else
@listings=ListingDetail.find_all_by_suburb_id(suburb_id)
end
@lists <<@listings
bedroom_id=params[:bedroom][:id]
if bedroom_id==1
@listings=ListingDetail.find_by_bedroom_id(:all)
else
@listings=ListingDetail.find_all_by_bedroom_id(bedroom_id)
end
@lists <<@listings
garage_id=params[:garage][:id]
if garage_id==1
@listings=ListingDetail.find_by_garage_id(:all)
else
@listings=ListingDetail.find_all_by_bedroom_id(garage_id)
end
@lists <<@listings
@lists =@lists.uniq! #as tye array will definitely contain duplicate
elements
end
above way is not a better soln it will be better if you use query.
--
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-/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
-~----------~----~----~----~------~----~------~--~---