(Rails) Arquitetando um controlador multi-modelo e exibição do índice ...?
-
06-07-2019 - |
Pergunta
Atualmente estou gerenciamento de vários modelos a partir de uma página de administrador do site único. Eu tenho as seguintes relações:
Sites -> Buildings -> Meters -> Values
Ao lado de cada "Sites" item I have "Editar | Apagar | Adicionar Building" Ao lado de cada item "Construção" eu tenho "Editar | Apagar | Adicionar Meter" Ao lado de cada item "Meter" eu tenho "Editar | Apagar | Add Value" Ao lado de cada item "valor" eu tenho "Editar | Apagar"
Neste ponto eu tenho um controlador frankensteined chamado "SiteManagerController" que administra desta página. Eu simplesmente tenho um método (e via correspondente no arquivo de rotas) assim:
add_site
add_building_to_site
add_meter_to_building
delete_site
delete_building
delete_meter
O que eu estou querendo saber, no entanto, é se há ou não um mecanismo de qualidade pelo qual a usar os métodos controladores de itens CRUD existentes ao ser capaz de processar o arquivo RJS apropriado para a página "SiteManager" e controlador?
Seria bom se eu pudesse de alguma forma rota para o controlador original (de modo a não ter que reescrever todos os métodos manualmente) e, ao mesmo trilhos redirecionar controle (não apenas visualmente, mas contextualmente) de volta para o controlador "SiteManager" depois de criar ou exclusão. Tenha em mente que eu não estou lidando com formas, mas simplesmente uma página de índice e múltipla "link_to_remote" s
Estou muito possivelmente fazendo a pergunta errada, por isso consideramos que ... em qualquer caso, estou aberto a sugestões.
Best.
Solução
Você pode absolutamente usar os saindo controladores de itens métodos CRUD. Você pode apontar link_to_remote
a qualquer url e ele irá inserir o código HTML que você instruí-lo a. Enquanto você manter as rotas padrão em routes.rb
, tudo deve funcionar bem. Isto irá manter o usuário na página SiteManager, mas ele estará interagindo com as rotas RESTful nos bastidores.
link_to_remote "Edit", :update => "site_#{site.id}",
:url => site_url(site), :method => :put
link_to_remote "Add Building", :update => "new_building", :url => buildings_url,
:method => :post
SitesController < ApplicationController
def update
@site = Site.find(params[:site_id])
@site.update_attirbutes!(params[:site_id])
render :partial => @site
end
end
BuildingsController < ApplicationController
def create
@building = Building.create(params[:building])
render :partial => @building
end
end