2014-11-11 20 views
6

Przełączyłem się z MySQL na PostgreSQL do użycia w Heroku. Teraz moje wyszukiwanie nie zadziała. co jest nie tak z operatorem actionView :: Template :: Error (PG :: UndefinedFunction. bŁĄD: operator nie istnieje. całkowita ~~ nieznanyActionView :: Szablon :: Błąd (PG :: UndefinedFunction: ERROR: operator nie istnieje: integer ~~ unknown

2014-11-11T19:59:58.082607+00:00 app[web.1]: Processing by AllListingsController#search_listings as JS 
    2014-11-11T19:59:58.105074+00:00 app[web.1]:  4: <% @listings.each do |listing| %> 
    2014-11-11T19:59:58.102205+00:00 app[web.1]:               ^
    2014-11-11T19:59:58.105066+00:00 app[web.1]: HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. 
    2014-11-11T19:59:58.105083+00:00 app[web.1]: app/controllers/all_listings_controller.rb:14:in `search_listings' 
    2014-11-11T19:59:58.110318+00:00 heroku[router]: at=info method=GET path="/search_listings?q=500&_=1415735994648" host=subleasy.herokuapp.com request_id=24a21078-d3fd-4bce-9afb-bfc9d976c0a7 fwd="50.247.32.153" dyno=web.1 connect=1ms service=35ms status=500 bytes=1754 
    2014-11-11T19:59:58.103449+00:00 app[web.1]: Completed 500 Internal Server Error in 21ms 
    2014-11-11T19:59:58.102207+00:00 app[web.1]: HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. 
    2014-11-11T19:59:58.105076+00:00 app[web.1]:  5: $("div.search_list").append("<%= escape_javascript(render('all_listings/listings_partial', a_listing: listing)) %>") 
    2014-11-11T19:59:58.105073+00:00 app[web.1]:  3: 
    2014-11-11T19:59:58.103270+00:00 app[web.1]: Rendered all_listings/search_listings.js.erb (5.1ms) 
    2014-11-11T19:59:58.105071+00:00 app[web.1]:  2: $("div.search_list").html("") 
    2014-11-11T19:59:58.105081+00:00 app[web.1]: app/views/all_listings/search_listings.js.erb:4:in `_app_views_all_listings_search_listings_js_erb___729824412217144086_70218143810320' 
    2014-11-11T19:59:58.102209+00:00 app[web.1]: : SELECT "listings".* FROM "listings" WHERE (rent LIKE '%500%' OR city LIKE '%500%' OR state LIKE '%500%' OR address LIKE '%500%') ORDER BY rent asc LIMIT 5 OFFSET 0 
    2014-11-11T19:59:58.105078+00:00 app[web.1]:  6: <% end %> 
    2014-11-11T19:59:58.102199+00:00 app[web.1]: PG::UndefinedFunction: ERROR: operator does not exist: integer ~~ unknown 
    2014-11-11T19:59:58.105068+00:00 app[web.1]: : SELECT "listings".* FROM "listings" WHERE (rent LIKE '%500%' OR city LIKE '%500%' OR state LIKE '%500%' OR address LIKE '%500%') ORDER BY rent asc LIMIT 5 OFFSET 0): 
    2014-11-11T19:59:58.105084+00:00 app[web.1]: 
    2014-11-11T19:59:58.082630+00:00 app[web.1]: Parameters: {"q"=>"500", "_"=>"1415735994648"} 
    2014-11-11T19:59:58.105058+00:00 app[web.1]: 
    2014-11-11T19:59:58.105061+00:00 app[web.1]: ActionView::Template::Error (PG::UndefinedFunction: ERROR: operator does not exist: integer ~~ unknown 
    2014-11-11T19:59:58.105063+00:00 app[web.1]: LINE 1: SELECT "listings".* FROM "listings" WHERE (rent LIKE '%500... 
    2014-11-11T19:59:58.105065+00:00 app[web.1]:               ^
    2014-11-11T19:59:58.077155+00:00 app[web.1]: Started GET "/search_listings?q=500&_=1415735994648" for 50.247.32.153 at 2014-11-11 19:59:58 +0000 
    2014-11-11T19:59:58.102203+00:00 app[web.1]: LINE 1: SELECT "listings".* FROM "listings" WHERE (rent LIKE '%500... 
    2014-11-11T19:59:58.105070+00:00 app[web.1]:  1: 
    2014-11-11T19:59:58.105085+00:00 app[web.1]: 
    2014-11-11T19:59:58.105079+00:00 app[web.1]:  7: $(".hidetable").hide() 

Moja metoda

def search_listings 
    @listings = Listing.where("rent LIKE ? OR city LIKE ? OR state LIKE ? OR address LIKE ?", "%#{params[:q]}%", "%#{params[:q]}%", "%#{params[:q]}%", "%#{params[:q]}%").order(sort_column + " " + sort_direction).paginate(:per_page => 5, :page => params[:page]) 
    respond_to do |format| 
     format.js 
    end 
end 
def sort_column 
     Listing.column_names.include?(params[:sort]) ? params[:sort] : "rent" 
    end 
def sort_direction 
    %w[asc desc].include?(params[:direction]) ? params[:direction] : "asc" 
end 

schematu. rb

create_table "listings", force: true do |t| 
    t.integer "user_id" 
    t.string "address" 
    t.string "city" 
    t.string "state" 
    t.date  "lease_start" 
    t.string "lease_length" 
    t.string "lease_type" 
    t.integer "rooms" 
    t.text  "description" 
    t.string "email" 
    t.string "phone" 
    t.integer "rent" 
    t.integer "zipcode" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.string "photo_file_name" 
    t.string "photo_content_type" 
    t.integer "photo_file_size" 
    t.datetime "photo_updated_at" 
    t.float "latitude",   limit: 24 
    t.float "longitude",   limit: 24 
    end 

dlaczego to nie działa w postgreSQL, gdy działa bezbłędnie w Mysql ???

+0

Tak na marginesie, 't.integer„kod pocztowy”' jest źle, kod pocztowy jest ** nie ** liczba, jest łańcuchem, który składa się głównie z cyfr. –

Odpowiedz

14

Wygląda na to, że próbujesz użyć operatora LIKE na kolumnie(czyli rent). Nie wierzę, że to zadziała (przynajmniej w postgres).

Według odpowiedzi here może chcesz spróbować dodać Obsada:

@listings = Listing.where("cast(rent as text) LIKE ? OR city LIKE ? OR ... 
+0

Tak! problem rozwiązany. Dziękuję Ci! – robbo

Powiązane problemy