2017-01-21 2 views
0

ID 대신 매개 변수로 문자열을 전달하는 데 문제가 있습니다. 나는 계속 " 'id'= stack"으로 게시물을 찾을 수 없습니다.Ruby on Rails - 'id'= 문자열이 포함 된 게시물을 찾을 수 없습니다.

routes.rb는 리디렉션 컨트롤러에서 : short_url에 대한 GET 요청을합니다.

get '/:short_url' => 'posts#redirect' 
resources :posts 

post_controller.rb는 게시물의 매개 변수 [: short_url]을 (를) 찾습니다.

def redirect 
    @post = Post.find(params[:short_url]) 
    redirect_to @post.(params[:url]) 
end 

보기는 단순히 @ post.each do | post | 고리.

<a class="item" target="_blank" href="<%= post.short_url %"> 
     <div>Short URL</div> 
     <%= post.short_url %> 
    </a> 

라우트 나 컨트롤러 레벨에서 매개 변수를 잘못 호출하고 있는지 확실하지 않습니다.

+0

'id'= stack에있는 "stack"은 전달되는 문자열의 예입니다. – Dorian

+0

'@post = Post.find_by_short_url (params [: short_url]) 구문을 사용해야합니다. – djothefou

답변

3

find 메서드는 id (정수)을 기반으로 레코드를 찾습니다. 다른 필드 (귀하의 경우 short_url)를 기반으로 테이블을 조회하려면 find_by 메소드를 사용해야합니다.

당신은 ActiveRecord으로 오류 Couldn't find Post with 'id'=stack을 받고있어

가 존재하지 않습니다 stackidposts 테이블을 찾고 있습니다. 시도해보십시오.

@post = Post.find_by(short_url: params[:short_url]) 
redirect_to @post 
+0

감사합니다! Arun! 터미널에 "puts"를 사용하여 문제를 해결했으며 .find 대신 .find_by를 사용해야한다는 것을 깨달았습니다. 많은 것을 감사드립니다. – Dorian

관련 문제