tag submit_tag rails image_tag form ruby-on-rails dynamic path helpers

ruby-on-rails - submit_tag - rails tag



Caminos dinĂ¡micos en Helper (3)

Estoy intentando crear un método de ayuda para mis enlaces de administrador. En bastantes vistas tengo el código

<% if current_user %> <%= link_to "Edit", edit_model_path(model) %> <%= link_to "New", new_model_path %> <%= link_to "Delete", model, :confirm => "You''re a Noob", :method => :delete %> <% end %>

que solo se muestran cuando se inicia sesión

Me gustaría hacer algo como esto en su lugar

<%= admin_links(model) %>

y pasar el elemento actual al método de ayuda de la aplicación

def admin_links(m) if current_user a = "#{link_to "edit" edit_m_path(m)}" a << "#{link_to "new" new_m_path}" a << "#{link_to "Delete", m, :confirm => "Your a Noob", :method => :delete}" end end

O algo por el estilo.



Utilizaría un parcial para esto, en lugar de un ayudante. Donde quiera que quiera mostrar estos enlaces en sus vistas, simplemente renderice el parcial:

<%= render :partial => "admin_links", :locals => { :model => model } %>

En _admin_links.html.erb solo pega el código original:

<% if current_user %> <%= link_to "Edit", edit_model_path(model) %> <%= link_to "New", new_model_path %> <%= link_to "Delete", model, :confirm => "Your a Noob", :method => :delete %> <% end %>


básicamente necesitas transformar el nombre de clase del modelo en algo que apunte a la ruta correcta.

model_name = m.class.to_s.underscore

Y luego usarlo para llamar a los métodos de ruta apropiados

link_to "edit", send("edit_#{model_name}_path", m)

Como un aparte, no necesitas poner link_tos en #{} porque esa función simplemente devuelve una cadena.