Pergunta

Estou usando a gem amigável_id. Eu também tenho minhas rotas aninhadas:

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

Então eu tenho URLs como /users/nfm/events/birthday-2009.

Nos meus modelos, quero que o título do evento seja escopo para o nome de usuário, para que ambos nfm e mrmagoo pode ter eventos birthday-2009 sem que eles sejam assados.

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

  ...
end

Eu também estou usando has_friendly_id :username no meu modelo de usuário.

No entanto, no meu controlador, só estou fazendo eventos pertinentes ao usuário que está conectado (current_user):

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

  ...
end

Isso não funciona; Eu recebo o erro ActiveRecord::RecordNotFound; expected scope but got none.

# 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)

ASSIM, por que preciso especificar explicitamente: escopo se estou restringindo -o a current_user.events? E por que o current_user.to_param precisa ser chamado explicitamente? Posso substituir isso?

Foi útil?

Solução

Eu tive exatamente o mesmo problema com amigas_id 2.2.7, mas quando atualizei para amigas_id 3.0.4 no meu aplicativo Rails 2.3.5, tudo funciona. Eu testei todas as quatro invocações que você mencionou no meu aplicativo e elas funcionam.

Algo a tomar nota são algumas alterações da API que podem afetá -lo. Os que encontrei foram:

  • :strip_diacritics foi substituído por :strip_non_ascii.

    Eu decidi mudar para StringEx's String#to_url em vez disso, substituindo normalize_friendly_id

  • resource.has_better_id? é agora !resource.friendly_id_status.best?

  • resource.found_using_numeric_id? é agora resource.friendly_id_status.numeric?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top