Question

J'utilise la pierre précieuse friendly_id. J'ai aussi mes itinéraires imbriqués:

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

J'ai donc URL comme /users/nfm/events/birthday-2009.

Dans mes modèles, je veux le titre de l'événement à portée a été définie au nom d'utilisateur, de sorte que les deux nfm et mrmagoo peuvent avoir des événements birthday-2009 sans qu'ils soient slugged.

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

  ...
end

J'utilise aussi has_friendly_id :username dans mon modèle utilisateur.

Cependant, dans mon contrôleur, je ne tirant les événements pertinents à l'utilisateur qui est connecté (current_user):

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

  ...
end

Cela ne fonctionne pas; Je reçois le ActiveRecord::RecordNotFound; expected scope but got none d'erreur.

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

SO , pourquoi dois-je préciser explicitement: la portée si je restreindre à current_user.events de toute façon? Et pourquoi le besoin de current_user.to_param à appeler explicitement? Puis-je remplacer ce?

Était-ce utile?

La solution

J'ai eu exactement le même problème avec friendly_id 2.2.7 mais quand je mis à jour à friendly_id 3.0.4 dans mes Rails 2.3.5 app, tout fonctionne. Je test de tous les 4 invocations de recherche que vous avez mentionné dans mon application et ils travaillent.

Quelque chose à prendre note de quelques modifications de l'API qui peuvent vous affecter. Ceux que je courais en étaient:

  • :strip_diacritics a été remplacé par :strip_non_ascii.

    J'ai décidé de passer à la String#to_url de Stringex place en remplaçant normalize_friendly_id

  • resource.has_better_id? est maintenant !resource.friendly_id_status.best?

  • resource.found_using_numeric_id? est maintenant resource.friendly_id_status.numeric?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top