每个循环中的动态url_path

时间:2012-07-29 12:46:55

标签: ruby-on-rails ruby-on-rails-3

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

2 个答案:

答案 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移动到对象层次结构中;这应该消除了在请求中传递类型的需要。