Pergunta

Eu tenho um recurso padrão:

resources :customers

Na página "mostrar" (/customers/:id) há um link de referência para outros clientes.Quando eu clicar nele, como faço para verificar se é ou não o referer é /customers/:id página?Eu tentei fazer isso:

[1] pry(#<CustomersController>)> URI(request.referer).path
=> "/customers/88" # previous ulr

[2] pry(#<CustomersController>)> customer_path
=> "/customers/98" # current url

mas ele não funciona.Em outras palavras, :id no /customers/:id sempre muda, então, como eu posso verificar se URI(request.referer).path pertence a customer_path?

if URI(request.referer).path == ??? #???
Foi útil?

Solução

Isto irá funcionar, no entanto, está longe de ser bonita.No entanto, é bastante flexível e está retransmitindo em url gerado pelo helper, portanto, não deve quebrar se você decidir alterar mapeamentos de url.

if URI(request.referer).path =~ Regexp.new(customer_path(':customer_id').gsub(':customer_id', '\d+'))

MUITO, MUITO, MELHOR SOLUÇÃO:

Aplicação Rails tem um método para reconhecer os caminhos já e retorna com controlador/ação:

Rails.application.routes.recognize_path(URI(request.referer).path)
#=> {:controller => 'customers', :action => 'show', :id => '88'}

Você pode usá-lo para escrever um método auxiliar:

def is_referer_customer_show_action?
  referer_url = Rails.application.routes.recognize_path(URI(request.referer).path)
  referer_url[:controller] == 'customers' && referer_url[:action] == 'show'
end
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top