2010-06-03 89 views
1

我有很多关联的模型。生成带参数的链接路径

用户:的has_many =>:帖子:视频:图像等

我有帮助的方法,其中

draw_chart user.videos 

def draw_chart(assoc) 
    assoc.each do |a| 
    link_to "update", [a.user, a], :method => :put, :remote => true, :confirm => 'orrly?' 
    end 
end 

问题就在这里接受该协会的一个是发送额外的参数更新行动。

例如我想要得到这个网址:/users/1/videos/2?status=done但我很困惑如何实现这个,而我使用[a.user, a]而不是user_videos_path(video, :status => 'done')。但我不能最后使用,因为它可以是视频或图片或其他任何

回答

3

我不会去使用eval,这怎么样

<%= link_to('update', self.send("user_#{a.class.name.pluralize}_path", a, , :status => 'done'), :method => :put, :remote => true, :confirm => 'orrly?') %> 
+0

这是很好的(但你应该使用桌面istead复数,或underscore.pluralize)。但这是另一个问题(如我的解决方案)链接变得不正确:'/users/1/videos.8?status = done'。这__dot__不是我正在寻找:) – fl00r 2010-06-03 12:20:05

+0

完全同意tableize部分,但一点也不确定.8 – nas 2010-06-03 12:30:52

+0

路径是'self.send(“user _#{a.class.name.tableize} _path”,a。用户,a,:status =>'done'),结果就是这个奇怪的点。 – fl00r 2010-06-03 12:38:15

1

我能想起来的唯一的办法就是这个奇怪的一个:

link_to "update", eval("user_#{a.class.name.tableize}_path(#{a.school.id}, #{a.id}, :status => 'done')"), :method => :put, :remote => true, :confirm => 'orrly?' 

但是这看起来杂乱无章