찾기 방법 없이 기록을 찾다.
4976 단어 cancan
묘사
load_resource
방법은 id 이외의 열을 통해 데이터베이스 기록을 찾을 수 있도록 지원해야 한다. 예를 들어 이렇게 할 수 있어야 한다MyModel.find_by_permalink!(params[:id])
.토론 #1
before 필터를 사용하여 검색 동작을 사용자 정의할 수 있습니다.filter 이전: permalink를 통해,:only=>:show 찾기
리소스 로드
def find_by_permalink
책.Permalink를 통해 당신을 찾습니다!(매개변수[:id])
끝맺다
자술문서에서 이 점을 언급했는데, 그것이 이 문제를 만족시킬 수 있습니까?나는
:find_attribute
옵션을 추가해서 자원을 불러올 수 있지만, 이런 방법은 훨씬 유연하다.다른 속성을 통해서만 얻을 수 있을 뿐만 아니라, 서로 다른 관련이나 명칭 범위를 통해서도 얻을 수 있습니다.@book = 현재 사용자입니다.책?찾기(매개변수[:id])
# 또는
책.출판하다.찾기(매개변수[:id])
이게 의미가 있나요?무슨 말인지 알겠어요.
그러나 현재의 방법을 사용하면 더 많은 수동 작업 (특히 끼워 넣는 자원 사용) 이 필요할 것이다. 이것은 내가 피하고 싶은 것이다.이 옵션을 실현하려면, 현재 방법이 여전히 실행 가능한지 확인하십시오. 말씀하신 대로 더욱 유연합니다.
토론 #2
나의 또 다른 망설임은 현재 모델에만 설정할 수 있고 끼워 넣은 아버지 자원에 설정할 수 없다는 것이다. (혼란스러운 끼워 넣은 해시를 얻지 않는다).그러나 나는 이 문제를 좀 가식적으로 만들고 더 많은 피드백을 얻을 것이다.이와 관련된 것은, 비포어 필터를 사용하지 않고 컨트롤러에
토론 #셋
스타일의 리셋 방법을 추가하는 것을 처음 고려했다.이렇게 하면 끼워 넣은 자원을 더 쉽게 덮어쓸 수 있지만, 나는 이것이 일을 더욱 복잡하게 만들 것이라고 생각한다.클래스 BooksController
프라이빗
def find_book
# 저자.책?Permalink를 통해 당신을 찾습니다!(매개변수[:id])
끝맺다
끝맺다
find_book
나는 자원을 불러오고 권한을 부여하는 방법을 건너뛰어야 한다. 왜냐하면 우리는 특수한 to 파라미터를 사용했기 때문이다.그래서 이건 내 +1이야.죄송합니다.
토론 #4
제가 해결책을 생각해 냈습니다.나는 작은 플러그인acts_as_complex_param을 썼는데 모델에
토론 #5
방법을 세웠다.CanCan은 레코드를 찾을 때 다음과 같은 작업을 수행할 수 있습니다.find_by_param!
이것은 self.model_instance ||= (base.try(:find_by_param!, id) || base.find(id))
방법에 더 많은 옵션을 제공할 필요가 없을 뿐만 아니라, 플러그인 컨트롤러를 사용해도 매우 유연성을 제공할 수 있다.당연하지만약 사람들이 플러그인을 사용하고 싶지 않다면, 그들은 수동으로 방법을 정의할 수 있다.
load_resource
@lawrencecurtis, 다른 사람들이 사용할 수 있다는 것을 알게 되어 기쁩니다. 저는 반드시 그것을 추가하는 것을 고려할 것입니다.@molte, "find by param!"내가 보기에 이것은 명확한 선택에 불과하다.나는 이런
토론 #6
옵션을 추가할 수 있다.리소스 로드 및 승인:find by=>:permalink
find_by
플러그인 자원을 사용할 때 여러 번 지정해야 한다(예를 들어 한 문장에 주석이 많으면 Articles Controller와 Comments Controller에'find by'를 지정해야 한다.방법도 기호보다 훨씬 유연하다(여러 속성을 조합할 수 있기 때문이다).
토론 #7
이것은 또 다른 의존성이다. 캔캔의 가장 좋은 점은 기존의 물건을 제공하는 것이다. 캔캔캔은 이미 authlogic와 같은 것에 의존한다. 사용자 정의find by 방법을 사용하면 블록에 그것들을 만들 수 있다고 생각한다...리소스 로드 및 승인:find by=>:permalink
혹은
리소스 로드 및 승인:중첩=>:주석 도
@post=post.permalink 매개 변수를 통해 찾기
@ 의견 = @post.평론 permalinkparams[:id]를 통해 찾기
끝맺다
토론 #8
또는 더 좋아...리소스 로드 및 승인:중첩=>:comment,:find by=>{
:post=>:permalink,
:comment=>:permalink
}
토론 #9
그럼 얘는토론 #10
아니야?산열이 아닌 그룹을 사용하는 것이 더 쉽다.:nested => :post
만약에 그것이 하나의 수조라면 id, 하나는permalink 등등을 지정할 수 없다. 단지 그것을 더욱 상세하고 (쉽게 읽을 수 있도록) 유연하게 할 뿐이다. 그래, 그것은post not comment:)토론 #11
와 하나의 수조일 것이다. 내 말은토론 #12
이다.:find_by => [:permalink, :permalink]
나는 여전히 그것이 더 읽기 어렵다고 생각한다.) 토론 #13
비록 나는 여전히 모델에서 한 가지 방법을 사용하는 것이 더 좋을 것이라고 믿는다.그것은 더욱 건조하고 유지하기 쉽다. 모든 컨트롤러에서 자신의 조작을 반복할 필요가 없다. 그 중에서 메인 자원은 특정한 자원에 끼워 넣는다.이외에도 (내 플러그인을 사용할 때) 수동으로
토론 #14
방법을 지정할 필요가 없습니다.나는 이것이 모델에 속하는 논리라고 정말 믿는다.to_param
@molte, 더 건조하고 좋아요.만약 이 방법토론 #15
을 호출했다면 어떻게 해야 합니까?그것은from_param
와 매우 좋은 대칭성을 가지고 있다.클래스
Permalink를 통해 당신을 찾습니다!(매개변수)
끝맺다
def to_param
permalink
끝맺다
끝맺다
그러나 같은 매개 변수는
to_param
옵션과 같은 다른 옵션에도 적용될 수 있다.이 :class
옵션과 같은 건조/중첩 문제가 있습니다.나는 이 문제를 어떻게 처리하는지에 있어서 일치를 유지하고, 클래스에서 사용하는 방법을 통해 건조할 수 없기를 바란다. :find_by
히드록시 메틸 멜라민 메틸 에테르...나는 :class
가 더 좋은지 모르겠다.나는 처음에 토론 #16
find 명명 관례를 따를 것을 선택했다.from_param
"friendly id"플러그인을 사용하고 있습니다.http://github.com/norman/friendly_id내 permalinks와 CanCan을 사용하는 데 아무런 문제가 없습니다."예쁜 URL"을 원하는 모든 사람에게 이 플러그인을 사용할 수 있습니다.find_by_param!
@meskyanichi가 말한 플러그인이 괜찮아 보입니다.이 문제를 해결한 것 같다.토론 #17
플러그인은 괜찮은 발견이다.나의 유일한 문제는토론 #18
의 id 번호와 영구 링크를 받아들일 것이다.일반적인 경우, 보안상의 이유나 검색엔진 최적화로 인해, 당신은 이렇게 하기를 원하지 않습니다.문서의 해결 방안은 id 번호를 사용하는 상황에서 단독 이상을 추가하거나 줄을 바꾸는 것입니다. 그러나 이렇게 하면 플러그인의 용도와 편의성을 파괴할 수 있습니다.내가 많이 생각할수록 모델에서 이를 정의하는 방법을 사용하는 경향이 있다(예를 들어
토론 #19
.만약 이것이 다른 자원 로드 플러그인이 채택할 어떤 약속이라면 다행이다.friendly_id
추가: 옵션별 검색 로딩 리소스 - 236CECEE3B3D6B9EA58A52698D183C733BB750D51에서 종료Reference
이 문제에 관하여(찾기 방법 없이 기록을 찾다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://github.com/ryanb/cancan/issues/19텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)