Frage

Ich bin mit der friendly_id gem. Ich habe auch meine Routen verschachtelt:

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

Also ich habe URLs wie /users/nfm/events/birthday-2009.

In meiner Modelle, möchte ich den Titel der Veranstaltung auf dem Benutzernamen scoped werden, dass so beide nfm und mrmagoo können Ereignisse birthday-2009 haben, ohne sie slugged werden.

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

  ...
end

Ich bin auch has_friendly_id :username in meinem User-Modell verwendet wird.

Doch in meinem Controller, Ich ziehe nur aus Ereignissen an den Benutzer relevant, die angemeldet ist (current_user):

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

  ...
end

Das funktioniert nicht; Ich erhalte die Fehler 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)

SO , warum muss ich explizit angeben: Umfang, wenn ich es current_user.events sowieso bin zu beschränken? Und warum current_user.to_param Notwendigkeit, explizit genannt werden? Kann ich das außer Kraft setzen?

War es hilfreich?

Lösung

ich hatte genau das gleiche Problem mit friendly_id 2.2.7, aber wenn ich aktualisiert friendly_id 3.0.4 in meiner Rails 2.3.5 app, alles funktioniert. Ich habe Test alle 4 find Anrufungen Sie in meiner app erwähnt und sie arbeiten.

Etwas zur Kenntnis zu nehmen sind ein paar API-Änderungen, die Sie beeinflussen können. Die, die ich lief in waren:

  • :strip_diacritics hat mit :strip_non_ascii ersetzt.

    Ich beschloss, Stringex des String#to_url zu wechseln, anstatt durch normalize_friendly_id zwingenden

  • resource.has_better_id? ist jetzt !resource.friendly_id_status.best?

  • resource.found_using_numeric_id? ist jetzt resource.friendly_id_status.numeric?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top