2016-10-02 3 views
0

모든 제출 요청시 내 레일 서버는 시도 중임을 나타냅니다 로고를 얻은 다음 id = logo.png을 가진 사용자가 없음을 보여줍니다. 누군가 제발 도와주세요!레일즈 앱이 "/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

사용자 # show에로드 된 템플릿 중 하나에'/ users/logo.png'를 (를) 가리키는 이미지 src를 넣었어야합니다. –

+0

@AndreyDeineko 작성 액션을 추가했습니다. – defiant

답변

1

브라우저가 상대 URL을 확인하는 방식으로 인해 이런 일이 발생했습니다. 이미지 src (예 :)에 정규화 된 URL을 사용하면 브라우저가 아무 것도 할 필요가 없습니다. 단지 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 image_tag helper를 사용하는 것이 가장 좋습니다. image_tag("logo.png").

관련 문제