2009-11-25 3 views
4

나는 friendly_id 보석을 사용하고 있습니다. 내 경로도 중첩되어 있습니다.왜 friendly_id로 범위를 명시 적으로 지정해야합니까?

# config/routes.rb 
map.resources :users do |user| 
    user.resources :events 
end 

그래서 /users/nfm/events/birthday-2009과 같은 URL이 있습니다. 내 모델에서

, 나는 모두 nfmmrmagoo이 그들을 장타율하지 않고 이벤트를 birthday-2009을 가질 수 있도록 이벤트 제목, 사용자 이름에 범위되어야합니다.

# app/models/event.rb 
def Event < ActiveRecord::Base 
    has_friendly_id :title, :use_slug => true, :scope => :user 
    belongs_to :user 

    ... 
end 

나는 또한 내 사용자 모델에서 has_friendly_id :username을 사용하고 있습니다.

하지만, 내 컨트롤러, 난 단지 (CURRENT_USER)에 로그인 한 사용자에게 해당 이벤트를 당겨 해요 :

def EventsController < ApplicationController 
    def show 
    @event = current_user.events.find(params[:id]) 
    end 

    ... 
end 

이 작동하지 않습니다; 오류 ActiveRecord::RecordNotFound; expected scope but got none가 표시됩니다. SO

# This works 
@event = current_user.events.find(params[:id], :scope => 'nfm') 

# This doesn't work, even though User has_friendly_id, so current_user.to_param _should_ return "nfm" 
@event = current_user.events.find(params[:id], :scope => current_user) 

# But this does work! 
@event = current_user.events.find(params[:id], :scope => current_user.to_param) 

, 왜 명시 적으로 지정할 필요가 수행 범위를 어쨌든 current_user.events로 제한하고있어 경우에? 그리고 current_user.to_param을 명시 적으로 호출해야하는 이유는 무엇입니까? 이 문제를 무시할 수 있습니까?

답변

4

friendly_id 2.2.7과 똑같은 문제가 있었지만, Rails 2.3.5 앱에서 friendly_id 3.0.4로 업데이트하면 모든 것이 작동합니다. 나는 네가 내 애플 리케이션에서 언급 한 모든 호출을 테스트하고 그들은 작동합니다.

영향을 줄 수있는 몇 가지 API 변경 사항이 있습니다. 내가 우연히 것들은했다 :

  • :strip_diacritics:strip_non_ascii로 대체되었습니다.

    내가 대신 normalize_friendly_id

  • resource.has_better_id? 오버라이드 (override) Stringex의 String#to_url로 전환하기로 결정 지금 !resource.friendly_id_status.best?

  • resource.found_using_numeric_id? 지금 resource.friendly_id_status.numeric?

입니다