Использование Rails 2.3.8 и friendly_id.
Модель человека:
class Person < ActiveRecord::Base
# Nice URL's in Rails.
def to_param
"#{login.downcase.gsub(/[^[:alnum:]]/,'-')}".gsub(/-{2,}/,'-')
end
end
Контролер людей:
class PeopleController < ApplicationController
def show
@person = User.find(params[:id])
if current_user == @person
@shops = @person.shops.paginate(:page => params[:page], :order => order)
else
@shops = @person.shops.by_status('published').paginate(:page => params[:page], :order => order)
end
end
end
Модель пользователя (раздетая):
class User < ActiveRecord::Base
extend ActiveSupport::Memoizable
acts_as_authentic do |c|
c.validate_email_field = false
c.validate_login_field = false
end
attr_accessible :login, :email, :password, :password_confirmation, :name, :location, :website,
:allow_follower, :allow_message, :allow_updates, :allow_newsletter, :avatar, :role, :remember_me
# Returns name or login if name is blank
def full_name
if self.name.blank?
login.strip
else
(self.name || '').strip
end
end
memoize :full_name
# Nice URL's in Rails.
def to_param
"#{login.downcase.gsub(/[^[:alnum:]]/,'-')}".gsub(/-{2,}/,'-')
end
end
Определение to_param
в People.rb
и User.rb
не работает.
Все страницы на контроллере Users
предназначены исключительно для настроек учетной записи пользователя и предназначены для частного просмотра, поэтому мне не нужен красивый URL-адрес. Но я создал People
контроллер для демонстрации в качестве профиля пользователя для публичного просмотра.
URL-адрес people
в настоящее время http://abc.com/people/1
, я хочу изменить его на http://abc.com/people/login-name-here
, но без нарушения @person = User.find(params[:id])
в people
контроллере, потому что мне нужно выполнить поиск сфинксов в нем.
Что я могу сделать, чтобы достичь этого? Спасибо.