2016-10-02 1 views
0

Also bei jeder Anfrage senden mein Rails Server zeigt es versucht um das Logo zu erhalten und dann zeigt es keinen Benutzer mit id = logo.png. Kann mir bitte jemand helfen?Rails App versucht GET "/users/logo.png" und zeigt ActiveRecord :: RecordNotFound (Benutzer mit 'ID' = logo) nicht gefunden mit jedem Senden

Detaillierte Fehlermeldung:

Started GET "https://stackoverflow.com/users/2" for 127.0.0.1 at 2016-10-02 19:01:18 +0530 
Processing by UsersController#show as HTML 
    Parameters: {"id"=>"2"} 
    User Load (0.0ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 2 LIMIT 1 
    User Load (0.5ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 2 LIMIT 1 
    Rendered users/show.html.erb within layouts/application (1.8ms) 
    Rendered layouts/_header.html.erb (0.0ms) 
    Rendered layouts/_sidebar.html.erb (1.0ms) 
Completed 200 OK in 130ms (Views: 126.9ms | ActiveRecord: 0.5ms) 


Started GET "https://stackoverflow.com/users/logo.png" for 127.0.0.1 at 2016-10-02 19:01:18 +0530 
Processing by UsersController#show as PNG 
    Parameters: {"id"=>"logo"} 
    User Load (1.0ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 0 LIMIT 1 
Completed 404 Not Found in 3ms (ActiveRecord: 1.0ms) 

ActiveRecord::RecordNotFound (Couldn't find User with 'id'=logo): 
    app/controllers/users_controller.rb:43:in `show' 

Hier ist meine Routen-Datei:

Rails.application.routes.draw do 
    root      'dashboard#show' 

    get 'signup'   => 'users#new' 
    get 'admins'   => 'users#admins_dashboard' 
    delete 'users'   => 'users#destroy' 
    get '/users/edit/:id' => 'users#edit' 
    resources :users 

    get 'login'    => 'sessions#new' 
    post 'login'   => 'sessions#create' 
    delete 'logout'   => 'sessions#destroy' 
end 

Mein Controller-Aktion für den Anwender:

def show 
    @user = User.find(params[:id]) 
    end 

def create 
    @user = User.new(user_params) 
    if @user.save 
     session[:user_id] = @user.id 
     redirect_to '/' 
    else 
     redirect_to '/signup' 
    end 
    end 

das Modell für den Anwender:

class User < ActiveRecord::Base 
    has_secure_password 

    def admin? 
    self.role == 'admin' 
    end 
end 
+0

Bitte zeigen Sie Ihre Erstellungsaktion an –

+0

Sie müssen ein Image src auf '/ users/logo.png' in einer der Templates zeigen, die auf Benutzer geladen sind # show. –

+0

Die create action @AndreyDeineko – defiant

Antwort

1

Dies geschah aufgrund der Art und Weise, wie der Browser relative URLs auflöst. Wenn Sie eine vollqualifizierte URL für eine Bildquelle verwenden (z. B .: http://example.com/logo.png), muss der Browser nichts tun. Es gibt nur eine Anfrage an diese URL aus. Wenn Sie jedoch relative URLs (ohne das Protokoll und die Domäne) verwenden, muss der Browser die vollständige URL herausfinden, um die Anfrage zu stellen.

Sie hatten <img alt="Brand" src="logo.png" /> in Ihrem Layout, also verwendete der Browser den aktuellen Kontext, um die vollständige URL für dieses Bild aufzulösen. Wenn Sie unter http://example.com/users/1 waren, wurde die Quelle in http://example.com/users/logo.png aufgelöst, weil sie den aktuellen Pfad verwendet hat. Wenn Sie auf der Startseite waren, konnte das Logo gefunden werden, weil Sie sich im Root-Pfad befanden. Daher wurde src in http://example.com/logo.png aufgelöst.

Eine Möglichkeit, dies zu lösen, besteht darin, einen Schrägstrich an die src <img alt="Brand" src="/logo.png" /> anzuhängen, der den Browser zwingt, ihn im Stammverzeichnis Ihrer Domäne aufzulösen. Dies funktioniert nur in der Rails-App, wenn sich dieses Bild im Öffentlichen Ordner befindet.

Wenn Sie das Bild in Ihren Assets platziert haben, verwenden Sie am besten den Befehl rails image_tag helper. image_tag("logo.png").

Verwandte Themen