2012-02-20 3 views
1
와 ID를 내 컨트롤러 내가 :guuid를 사용하는 기본 :id을 변경하려는 등

REST의 경로 및 오버라이드 (override) : to_param

을 편집, 추가, 생성의 기본을 편안하고 경로를 사용

. 그래서 내가 한 일은이었다

# routes.rb 
resources :posts 

# Post Model 
class Post < ActiveRecord::Base 
    def to_param # overridden 
     guuid 
    end 
end 

이 작동하지만이이 코드를 볼 때 내 변형 한 REST 컨트롤러 코드는이

def show 
    @post = Post.find_by_guuid(params[:id]) 
    @title = "Review" 
    respond_to do |format| 
    format.html # show.html.erb 
    end 
end 

같은 것을 가지고 ..

Post.find_by_guuid(params[:id]) 

이 보인다 잘못이지만 작동합니다. 이 같은 그것을 쓸 수없는 이유를 이해하지 않습니다

Post.find_by_guuid(params[:guuid]) 

왜 나는 아직도 내가 그것을 사용하지 않는 경우 params[:id] 전달해야합니까?
내 접근 방식이 올바른지 또는 고려해야 할 사항인지에 대한 피드백을 찾고 있습니다.
작동한다고해도 항상 올바른 것은 아닙니다.

답변

2

rake routes을 입력하고 경로 출력을 확인하십시오. params[:id]의 출현 부분 중 일부에 ': id'라는 단편이 표시됩니다. 레일 규칙인데 resources을 경로에 사용하면 매개 변수의 이름은 id입니다. 나는 당신이 그것을 바꿀 수 있는지 모르겠다. (단, 을 유지하면서 그렇지 않으면 규칙을 따라 가면된다.) 그러나 어쨌든 그렇게해서는 안된다. 비록 그것이 매우 논리적으로 보이지 않는다고하더라도, 실제로는 이해가된다. 라우팅이 작동합니다.

+0

괜찮 으면, 레일 콘벤션이라면 나는 그것을 고수 할 것입니다. 나는 그들의 노선이 노선에서 그것을 무시할 수있는 또 다른 방법이 될 수 있다고 생각했습니다. 의견을 보내 주셔서 감사합니다. – alenm

관련 문제