Подтвердить что ты не робот

Динамические пути в помощнике

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

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

Или что-то подобное.

4b9b3361

Ответ 1

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

model_name = m.class.to_s.underscore

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

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

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

Ответ 3

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

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