如何用friendly_id显示路径?

时间:2014-08-14 02:14:26

标签: ruby-on-rails ruby ruby-on-rails-4 friendly-id

请注意,User有许多Photos。我正在使用friendly_id gem为照片生成一个slug。这是我的照片模型:

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,这是我的routes.rb

scope ':profile_name' do
  resources :photos
end

在我的控制器中,我正在做@photo = Photo.all

我试过这个但是没有工作:<a href="<%= photo %>">

我怎样才能拍照#show path ??

2 个答案:

答案 0 :(得分:0)

你试试吗

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

<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)

答案 1 :(得分:0)

<强> LINK_TO

首先,您不应该尝试使用ruby变量填充“裸”<a> - 您需要使用<%= link_to %> helper

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

问题在于范围,特别是考虑到此范围用于确定变量。我认为问题在于,由于Rails需要来自此范围的变量,因此无法在没有它的情况下处理任何链接

如评论中所述,解决该错误的简单方法是使用两个值填充路径:

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

您需要查找佣金路线才能使其正常工作


<强> Friendly_ID

如果您要填充此路线的friendly_id slug值,则需要做两件事:

  
      
  1. profile_name值作为“slug”(不是ID)
  2. 传递   
  3. 传递photo对象本身
  4.   

我在评论中注意到Tiago Farias为您发布了一个可能的解决方案。如果您希望与friendly_id一起使用,则需要传递photo对象,而无需来定义id属性(这将允许friendly_id工作它的魔力)

您需要考虑的下一件事是,由于:profile_name没有绑定到任何“资源”(控制器/模型),friendly_id将无法填充您的名称/值我期待。在这种情况下,您需要自己设置值(通过在控制器中明确定义)