如何让rails路由器从内容中动态选择控制器



我正在构建一个可以容纳不同类型的播放列表功能,我需要一个通用的url助手,根据传递给它的对象类型,它将转到控制器#操作。

例如:

remove_from_playlist_path(:playlist_id: 1, :content_id: 34)

我尝试的路线:

[:links, :medias, :documents].each do |content|    
get 'remove_from_playlist', :controller => :content, :action => :remove_from_playlist, :type => content, :as => 'remove_' + content.to_s + 'playlist'
end

在每个内容类型的控制器中,我都有一个从播放列表中删除的操作,看起来像这样:

def remove_from_playlist
playlist = Playlist.find(params[:playlist_id])
playlist.links.delete @link
removed successfully!'
end

如何使路由正常工作,并允许我只传递对象,并使用通用url帮助程序将其重定向到正确的{type}#remove_from_playlist

谢谢!

最终以另一种方式解决了这个问题。

将从播放列表中删除的内容放在播放列表控制器上,而不是在每个内容控制器中重复,并使用Object.const_get(params[:klass])将正确的类发送到@playlist.send(klass).delete

希望这将帮助具有类似架构的人。

最新更新