diff --git a/app/components/sdg_management/relations/index_component.html.erb b/app/components/sdg_management/relations/index_component.html.erb index cf3592dc9..7a9a1c5c0 100644 --- a/app/components/sdg_management/relations/index_component.html.erb +++ b/app/components/sdg_management/relations/index_component.html.erb @@ -6,6 +6,7 @@ <%= model_class.human_attribute_name(:title) %> <%= SDG::Goal.model_name.human(count: 2).upcase_first %> <%= SDG::Target.model_name.human(count: 2).upcase_first %> + <%= t("admin.actions.actions") %> @@ -15,6 +16,14 @@ <%= record.title %> <%= record.sdg_goal_list %> <%= record.sdg_target_list %> + + <%= render Admin::TableActionsComponent.new( + record, + actions: [:edit], + edit_text: t("sdg_management.actions.edit"), + edit_path: edit_path_for(record) + ) %> + <% end %> diff --git a/app/components/sdg_management/relations/index_component.rb b/app/components/sdg_management/relations/index_component.rb index 0aaed38d0..8f561534b 100644 --- a/app/components/sdg_management/relations/index_component.rb +++ b/app/components/sdg_management/relations/index_component.rb @@ -16,4 +16,13 @@ class SDGManagement::Relations::IndexComponent < ApplicationComponent def model_class records.model end + + def edit_path_for(record) + { + controller: "sdg_management/relations", + action: :edit, + relatable_type: record.class.name.tableize, + id: record + } + end end diff --git a/app/controllers/sdg_management/relations_controller.rb b/app/controllers/sdg_management/relations_controller.rb index f81ad8502..a0edec379 100644 --- a/app/controllers/sdg_management/relations_controller.rb +++ b/app/controllers/sdg_management/relations_controller.rb @@ -3,6 +3,10 @@ class SDGManagement::RelationsController < SDGManagement::BaseController @records = relatable_class.accessible_by(current_ability).order(:id).page(params[:page]) end + def edit + @record = relatable_class.find(params[:id]) + end + private def relatable_class diff --git a/app/views/sdg_management/relations/edit.html.erb b/app/views/sdg_management/relations/edit.html.erb new file mode 100644 index 000000000..d916f0721 --- /dev/null +++ b/app/views/sdg_management/relations/edit.html.erb @@ -0,0 +1 @@ +

<%= @record.title %>

diff --git a/config/locales/en/sdg_management.yml b/config/locales/en/sdg_management.yml index c39a444b1..bacc84bbb 100644 --- a/config/locales/en/sdg_management.yml +++ b/config/locales/en/sdg_management.yml @@ -1,5 +1,7 @@ en: sdg_management: + actions: + edit: "Manage goals and targets" header: title: "SDG content" menu: diff --git a/config/locales/es/sdg_management.yml b/config/locales/es/sdg_management.yml index ce517cf25..23c10bd4a 100644 --- a/config/locales/es/sdg_management.yml +++ b/config/locales/es/sdg_management.yml @@ -1,5 +1,7 @@ es: sdg_management: + actions: + edit: "Asignar objetivos y metas" header: title: "Contenido ODS" menu: diff --git a/config/routes/sdg_management.rb b/config/routes/sdg_management.rb index 23a73d55d..5e8561784 100644 --- a/config/routes/sdg_management.rb +++ b/config/routes/sdg_management.rb @@ -9,8 +9,10 @@ namespace :sdg_management do types_constraint = /#{types.join("|")}/ get "*relatable_type", to: "relations#index", as: "relations", relatable_type: types_constraint + get "*relatable_type/:id/edit", to: "relations#edit", as: "edit_relation", relatable_type: types_constraint types.each do |type| get type, to: "relations#index", as: type + get "#{type}/:id/edit", to: "relations#edit", as: "edit_#{type.singularize}" end end diff --git a/spec/system/sdg_management/relations_spec.rb b/spec/system/sdg_management/relations_spec.rb index 94e479394..f4a405f9f 100644 --- a/spec/system/sdg_management/relations_spec.rb +++ b/spec/system/sdg_management/relations_spec.rb @@ -70,5 +70,17 @@ describe "SDG Relations", :js do expect(page).to have_content "6.1, 6.2" end end + + scenario "shows link to edit a record" do + create(:budget_investment, title: "Build a hospital") + + visit sdg_management_budget_investments_path + + within("tr", text: "Build a hospital") do + click_link "Manage goals and targets" + end + + expect(page).to have_css "h2", exact_text: "Build a hospital" + end end end