请注意,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 ??
答案 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
值,则需要做两件事:
- 将
传递profile_name
值作为“slug”(不是ID)- 传递
醇>photo
对象本身
我在评论中注意到Tiago Farias
为您发布了一个可能的解决方案。如果您希望与friendly_id
一起使用,则需要传递photo
对象,而无需来定义id
属性(这将允许friendly_id
工作它的魔力)
您需要考虑的下一件事是,由于:profile_name
没有绑定到任何“资源”(控制器/模型),friendly_id
将无法填充您的名称/值我期待。在这种情况下,您需要自己设置值(通过在控制器中明确定义)