2010-06-03 3 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 

Проблемы здесь, чтобы отправить дополнительные параметры обновить действие.

Например, я хочу получить этот URL: /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

это хорошо (но вы должны использовать tableize istead в множественном числе, или underscore.pluralize). но вот еще одна проблема (как в моем решении), ссылка стала неправильной: '/users/1/videos.8? status = done'. Этот __dot__ не то, что я ищу :) – fl00r

+0

Полностью согласен с табличной частью, но совсем не уверен. .8 – nas

+0

path is 'self.send (" user _ # {a.class.name.tableize} _path ", a. user, a,: status => 'done') 'и результат с этой странной точкой. – fl00r

1

Только решение, которое я могу придумать этот странный один:

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

, но это выглядит грязный

Смежные вопросы