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.
Rails proporciona rutas polimórficas para manejar este problema: http://api.rubyonrails.org/classes/ActionDispatch/Routing/PolymorphicRoutes.html
= link_to "Edit", polymorphic_path(model), :method => :put
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.