如何让 rails 路由器从内容中动态选择控制器?
How can I get the rails router to choose controller dynamically from content?
我正在构建一个可以容纳不同类型的播放列表功能,我需要一个通用 url 帮助程序,它会根据传递给它的对象类型转到 controller#action。
例如:
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])
将正确的 class 发送到 @playlist.send(klass).delete
希望这对具有类似架构的人有所帮助。
我正在构建一个可以容纳不同类型的播放列表功能,我需要一个通用 url 帮助程序,它会根据传递给它的对象类型转到 controller#action。
例如:
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])
将正确的 class 发送到 @playlist.send(klass).delete
希望这对具有类似架构的人有所帮助。