Until now, in order to edit an answer, we had to click on its title on the table and then on the "Edit answer" link. That was tedious and different from what we usually do in the admin section. Furthermore, the code for the answers table was written twice and when we modified it we forgot to update the one in the `show` action, meaning the table here provided less information than the information present in the answers tables. Co-Authored-By: Javi Martín <javim@elretirao.net>
45 lines
1.3 KiB
Ruby
45 lines
1.3 KiB
Ruby
# This module is expanded in order to make it easier to use polymorphic
|
|
# routes with nested resources in the admin namespace
|
|
module ActionDispatch::Routing::UrlFor
|
|
def resource_hierarchy_for(resource)
|
|
resolve = resolve_for(resource)
|
|
|
|
if resolve
|
|
if resolve.last.is_a?(Hash)
|
|
[resolve.first, *resolve.last.values]
|
|
else
|
|
resolve
|
|
end
|
|
else
|
|
resource
|
|
end
|
|
end
|
|
|
|
def admin_polymorphic_path(resource, options = {})
|
|
namespaced_polymorphic_path(:admin, resource, options)
|
|
end
|
|
|
|
def sdg_management_polymorphic_path(resource, options = {})
|
|
namespaced_polymorphic_path(:sdg_management, resource, options)
|
|
end
|
|
|
|
def namespaced_polymorphic_path(namespace, resource, options = {})
|
|
if %w[Budget::Group Budget::Heading Poll::Booth Poll::BoothAssignment Poll::Officer
|
|
Poll::Question Poll::Question::Answer Poll::Question::Answer::Video Poll::Shift
|
|
SDG::LocalTarget].include?(resource.class.name)
|
|
resolve = resolve_for(resource)
|
|
resolve_options = resolve.pop
|
|
|
|
polymorphic_path([namespace.to_sym, *resolve], options.merge(resolve_options))
|
|
else
|
|
polymorphic_path([namespace.to_sym, *resource_hierarchy_for(resource)], options)
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def resolve_for(resource)
|
|
polymorphic_mapping(resource)&.send(:eval_block, self, resource, {})
|
|
end
|
|
end
|