Rails 3: как использовать gsub или заменить пробельные символы на «-»? - PullRequest
1 голос
/ 30 июля 2011

У меня есть Артист модель имя: строка.и я хочу / users / 1 / artist / jimi-hendrix / posts вместо того, что у меня сейчас есть / users / 1 / artist / 1 / posts

Проблема в том, что я не могу использоватьfriendly_id для имени исполнителя, это потому, что у меня есть кратные имена одного и того же имени исполнителя, но я хочу использовать один и тот же слаг, например jimi-hendrix для всех записей 'jimi hendrix'.Пример:

  /users/3/artists/jimi-hendrix/posts
  /users/55/artists/jimi-hendrix/posts
  /users/106/artists/jimi-hendrix/posts

Friendly_id делает его похожим на это: (которого у меня нет) / users / 3 / artist / jimi-hendrix / posts / users / 55 / Artist / jimi-hendrix--2 / posts / users / 106 / artist / jimi-hendrix - 3 / posts

Итак, я собираюсь передать этот параметр имени исполнителя контроллеру вместо идентификатора.Но мне нужно взять имя и заменить все пробелы на «-», а затем добавить обратно правильные пробелы в контроллере?

Это будет моей ссылкой: (Можете ли вы сделать что-то вроде artist.name.gsub!() ??)

 <% @artists.each do |artist| %>
    <%= link_to artist.name, user_artist_posts_path(@user, artist.name) %> 
  <% end %>

Затем переверните его, когда я верну код обратно в контроллер?

def index @name = params (: artist_id) .gsub () #?@posts = ... .... end

Или кто-нибудь знает, как иметь неуникальные слагы в friendly_id, поэтому он не добавляет --2, --3, если атрибут имеетдубликат имени?

Ответы [ 2 ]

0 голосов
/ 03 марта 2012

Для этого вы должны иметь возможность использовать friendly_id с заданным значением.

Это доступно как в friendly_id 3.x, так и 4.x.

, например: в friendly_id 3.x вы можете сделать

has_friendly_id :name, :use_slug => true, :scope => :user

и в 4.x

extend FriendlyId
friendly_id :name, :use => :scoped, :scope => :user

Если ваш user_id равен 55, ваши операторы поиска должны быть, например, User.find(55).artists.find(params[:id]).ИЛИ Artist.find(params[:id]).where(:user_id => 55).

Не видя другого кода, который у вас может быть (отношения маршрутов / моделей / has_many / own_to), я не могу дать вам точный ответ.

FriendlyId 4.x документы http://rubydoc.info/github/norman/friendly_id/master/frames

FriendlyId 3.2.1.1 Руководство https://github.com/norman/friendly_id/blob/a9505acb68c56719d8225ccb09b5840e26be2783/Guide.md

0 голосов
/ 30 июля 2011

Для gsub всего, что не является символом слова:

@name = params[:artist_id].gsub( /\W/, '-' )
...