Как показать путь с friendly_id?

Обратите внимание, что User имеет много Photos. Я использую гем friendly_id для создания слагов для фотографий. Это моя фотомодель:

class Photo < ActiveRecord::Base
  extend FriendlyId
  friendly_id :photo_by_author, :use => :slugged

  def should_generate_new_friendly_id?
    title_changed?
  end

  def photo_by_author
    "#{title} by #{user_id}"
  end

  belongs_to :user
end

Мой путь profilename/photos/title, это мои маршруты.rb

scope ':profile_name' do
  resources :photos
end

В моем контроллере я делаю @photo = Photo.all.

Я пытаюсь это, но не работает: <a href="<%= photo %>">

Как я могу сделать фото # показать путь ??


person Igor Martins    schedule 14.08.2014    source источник
comment
Вы пробовали: ‹a href=‹%= photo_path(@photo) %››   -  person Tiago Farias    schedule 14.08.2014
comment
отображать эту ошибку: missing required keys: [:id, :profile_name]   -  person Igor Martins    schedule 14.08.2014
comment
Как насчет ‹a href=‹%= photo_path(:id =› @photo.id, :profile_name =› @photo.profile_name) %›› . Если имя_профиля является атрибутом фотографии.   -  person Tiago Farias    schedule 14.08.2014
comment
в этом случае маршрут /profilename/photos/5848, конец - это идентификатор, а не слаг   -  person Igor Martins    schedule 14.08.2014
comment
Я понимаю. Вы можете сделать @photo.slug. Но это странно, вы должны иметь возможность генерировать путь только с голой записью «@photo», верно?   -  person Tiago Farias    schedule 14.08.2014


Ответы (2)


Ссылка_на

Во-первых, вам не следует пытаться заполнить «голый» <a> вашей рубиновой переменной — вам нужно использовать <%= link_to %> помощник:

<%= link_to photo.title, photo_path(photo) %>

Проблема заключается в вашей области, особенно если учесть, что эта область используется для определения переменной. Я считаю, что проблема в том, что, поскольку Rails ожидает переменную из этой области, он не сможет обработать ни одну из ссылок, не имея ее.

Простой способ устранить эту ошибку, как указано в комментариях, состоит в том, чтобы заполнить маршрут обоими значениями:

<%= link_to photo.title, photo_path(profile_name, photo) %> #-> photo & profile_name need to be declared

Вам нужно найти рейк-маршруты, чтобы это сработало.


Дружественный_ID

Если вы хотите заполнить значения friendly_id slug для этого маршрута, вам нужно сделать две вещи:

  1. Передайте значение profile_name как "slug" (не ID)
  2. Передайте сам объект photo

Я заметил в комментариях, что Tiago Farias опубликовал для вас возможное решение. Если вы хотите, чтобы это работало с friendly_id, вам нужно передать объект photo без определения атрибута id (это позволит friendly_id творить чудеса)

Следующее, что вам нужно учитывать, это то, что, поскольку :profile_name не привязан ни к какому «ресурсу» (контроллеру/модели), friendly_id не сможет заполнить ожидаемое имя/значение. В этом случае вам нужно установить значение самостоятельно (определив его явно в вашем контроллере)

person Richard Peck    schedule 14.08.2014

Вы пробовали

<% @photo.each do |photo| %>
<%= link_to photo.photo_by_author, photo %>
<% end %>

or

<a href=<%= photo %>" ><%= Photo.first.photo_by_author %></a
> 

внутри блока

или в вашей консоли rails c -s

include Rails.application.routes.url_helpers
default_url_options[:host] = "localhost"
photo_url(Photo.first)
person Papouche Guinslyzinho    schedule 14.08.2014