Я использую гем friendly_id. У меня также есть вложенные маршруты:
# config/routes.rb
map.resources :users do |user|
user.resources :events
end
Итак, у меня есть такие URL-адреса, как /users/nfm/events/birthday-2009
.
В моих моделях я хочу, чтобы заголовок события был связан с именем пользователя, чтобы и nfm
, и mrmagoo
могли иметь события 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
.
# 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)
ТАК, зачем мне явно указывать :scope, если я все равно ограничиваю его текущим_user.events? И почему current_user.to_param нужно вызывать явно? Могу ли я переопределить это?