2016-10-02 55 views
0

因此,在每次提交請求時,我的Rails服務器顯示它正在嘗試獲取徽標,然後顯示沒有用戶id = logo.png。有人能幫幫我嗎!Rails應用程序嘗試獲取「/users/logo.png」並顯示ActiveRecord :: RecordNotFound(無法找到具有'id'=標識的用戶)

詳細的錯誤信息:

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' 

這裏是我的路線文件:

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 

我的用戶控制器動作:

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 

模式,爲用戶:

class User < ActiveRecord::Base 
    has_secure_password 

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

請顯示您的創建動作 –

+0

您必須將映像src指向'/ users/logo.png'加載到用戶#show所加載的其中一個模板中。 –

+0

在我的頭文件佈局文件中添加了創建動作@AndreyDeineko – defiant

回答

1

這是由於瀏覽器解析相關URL的方式。當您爲圖像src使用完全限定的URL(例如:http://example.com/logo.png)時,瀏覽器不需要執行任何操作。它只是向該URL發出請求。但是,當您使用相對URL(沒有協議和域)時,瀏覽器必須找出完整的URL來發出請求。

您的佈局中有<img alt="Brand" src="logo.png" />,因此瀏覽器使用當前上下文來解析該圖像的完整URL。當您在http://example.com/users/1上時,src被解析爲http://example.com/users/logo.png,因爲它使用了當前路徑。當您在主頁中時,可以找到徽標,因爲您位於根路徑,因此它將src解析爲http://example.com/logo.png

解決此問題的一種方法是在src <img alt="Brand" src="/logo.png" />前加一個斜槓,強制瀏覽器在您的域的根目錄下解析它。如果該圖像位於公共文件夾中,則只能在您的rails應用程序中使用。

如果您將圖片放入資源中,最好使用rails image_tag helper。 image_tag("logo.png")

相關問題