0

我有一个带有 jQ​​uery 内容轮播的城市页面。轮播的内容由每个循环归档。

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,因为它们是动态的,基于加载的附件(图像)。

4

2 回答 2

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助手。

于 2012-07-29T14:06:06.163 回答
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 移动到对象层次结构中;这应该消除在请求中传递类型的需要。

于 2012-07-29T13:36:02.917 回答