запись объекта redirect_to с полем рядом со свойством ID - PullRequest
0 голосов
/ 21 августа 2010

Скорее всего, это легко сделать, но мне трудно даже четко сформулировать, что приводит меня к получению всевозможных полугермаинов, но не совсем того, что я пишу в сообщениях SO при поиске.

У меня есть ресурс, мы просто будем использовать пользователя как простой для обсуждения вариант использования.Мне нужны оптимизированные для SEO URL-адреса, поэтому вместо ~ / users /: id у нас есть ~ / users /: name , где действие show на моих контроллерах пользователей выполняет User.find_by_name (: name).Прекрасно работает.

В различных частях приложения я хочу перенаправить конечного пользователя обратно на мой ресурс.Документы, кажется, указывают, что я должен сделать

redirect_to @user, :notice => "your page is now DIAMONDS!"'

Проблема здесь в том, что автоматически появляется значение: id ресурса, а не то, что я ищу,Мне интересно, есть ли способ просто определить маршрут в моем файле маршрутов, который знает о моем желании использовать свойство name - и затем просто перенаправить к сгенерированному помощнику route_url.Но я не знаю, как это сделать.

А пока я прибегаю к этому:

flash[:notice]    = "Your account is now DIAMONDS.  *fist bump*"
redirect_to :action => :show , :id => @user.name

Для меня это не идеально, так как это хорошонемного повторяющегося кода (у меня есть много элементов пользовательского интерфейса, которые будут ссылаться на мой ресурс), и потому что я не могу понять, как включить flash как часть вызова метода redirect_to - каждую комбинацию фигурных скобокж / в redirect_to, который включает в себя флеш-бомбы на меня.

Я не думаю, что это специфично для моей проблемы, но я делаю это на Rails 3 на случай, если это действительно имеет какое-то значение с точки зрения доступных мне вариантов.

Извините заnoobishness:)

1 Ответ

2 голосов
/ 21 августа 2010

Довольно просто сделать.Стандартный способ сделать это:

/ app / models / user.rb

def to_param
  "#{id}-#{name}"
end

Это хорошо, и дает вам хороший SEO - http://yoursite.com/users/1345-supercool .... Вы можете немного изменить его, чтобы удалить «1345»:

/ app / models / user.rb

  # add_column :permalink, :string
  attr_protected :permalink
  before_create :set_permalink
  validates_uniqueness_of :permalink

  def set_permalink
    self.permalink = username.parameterize
  end

  def to_param
    permalink
  end

Этодаст вам http://yoursite.com/users/supercool и будет постоянным URL, поэтому, если пользователь изменит свое имя пользователя позже, URL останется прежним и будет радовать поисковые системы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...