我有一个带有jQuery内容轮播的城市页面。旋转木马的内容由每个循环归档。
CityController
@events = @city.events.find_all_by_hot(true)
@activities = @city.activities.find_all_by_hot(true)
@sights = @city.sights.find_all_by_hot(true)
@hot = @events + @activities + @sights
Class city
has_many: events
end
class events
belongs_to :city
has_many :attachments, :as => :attachable
accepts_nested_attributes_for :attachments
end
活动和景点模型是相同的
City view content slider:
@hot.each do |a|
a.attachments.each do |a|
= image_tag(a.file.url, :height =>"325px", :width =>"650px" ), url_path
我想在每个循环中生成链接(url_path)...我怎么能意识到这一点?它不能放置路由的url_path,因为它们是基于加载的附件(图像)的动态。
答案 0 :(得分:1)
虽然image_tag
的语法不正确,但您可以尝试使用
@hot.each do |hot|
hot.attachments.each do |a|
link_to polymorphic_path(a.attachable) do
image_tag(a.file.url, :height => "325px", :width => "650px")
end
end
end
如果我正确理解你的问题。还可以查看polymorphic_path帮助程序,这是您需要的。
答案 1 :(得分:0)
我是否正确,链接应指向a
哪个可以是任何活动,活动,景点?如
@hot = @events + @activities + @sights
我会尝试在CityController中创建一个特殊的控制器动作
def hottie
@duck = Kernel.const_get(params[:type]).find_by_id(params[:id])
redirect_to @duck
end
然后添加类似
的内容 match 'hottie/:type/:id' => 'city#hottie', as: 'hot'
应该为您提供一个路径助手,您可以将其用作:
<%=link_to("Open", hot_path(a.class.to_s, a.id)) %>
补充:这当然有点脏,需要考虑一些安全性(例如限制它只显示特殊类型)。您还可以考虑使用STI将三个类Event,Activities和Sights移动到对象层次结构中;这应该消除了在请求中传递类型的需要。