Динамические Пути в Помощнике - PullRequest
23 голосов
/ 24 июня 2009

Я пытаюсь создать вспомогательный метод для моих ссылок администратора. Во многих просмотров у меня есть код

<% 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 %>

, которые отображаются только при входе в систему.

Я бы хотел сделать что-то подобное на их месте

<%= admin_links(model) %>

и передать текущий элемент в вспомогательный метод приложения

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

Или что-то в этом роде.

Ответы [ 3 ]

53 голосов
/ 24 июня 2009

В основном вам нужно преобразовать имя класса модели во что-то, указывающее на правильный путь.

model_name = m.class.to_s.underscore

А затем использовать его для вызова подходящих методов пути

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

Кроме того, вам не нужно помещать link_tos в #{}, потому что эта функция просто возвращает строку.

44 голосов
/ 20 июля 2012

Rails предоставляет полиморфные маршруты для решения этой проблемы: http://api.rubyonrails.org/classes/ActionDispatch/Routing/PolymorphicRoutes.html

= link_to "Edit", polymorphic_path(model), :method => :put
3 голосов
/ 13 ноября 2009

Я бы использовал для этого частичное - вместо помощника. Везде, где вы хотите отобразить эти ссылки в ваших представлениях, просто визуализируйте частичное:

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

В _admin_links.html.erb просто вставьте оригинальный код:

<% 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 %>
...