0

今日、私は 5 つの異なるビューにそのようなリンクがあることに気付きました

<%= link_to t(:edit, scope: [:admin, :actions :model_name]), edit_admin_model_name_path(model_name)), class: "icon-edit" %>
<%= link_to t(:delete, scope: [:admin, :actions :model_name]), admin_model_name_path(model_name)),method: :delete, class: "icon-edit", data: { confirm: t(:confirm, scope: [:admin, :confirmation, eval(":#{model}s")]) %>

私のコードは本当にひどく見えます。そのため、そのようなリンクのヘルパー メソッドを作成したいと考えています。私は、それは次のようになるべきだと思います:

  def link_to_edit(model)
    link_to t(:edit, scope: [:admin, :actions :model_name]), edit_admin_METHOD_I_NEED(model)_path(METHOD_I_NEED(model)), class: "icon-edit"
  end
  def link_to_delete(model)
    link_to t(:delete, scope: [:admin, :actions :model_name]), admin_METHOD_I_NEED(model)_path(METHOD_I_NEED(model))), method: :delete, class: "icon-delete", data: { confirm: t(:confirm, scope: [:admin, :confirmation, ":#{model}s"]) }
  end

というわけで、必要なのは とは逆の ruby​​ メソッド#{}です。

Rubyにはそのような方法がありますか、それとも別の方法でこれを行う必要がありますか?

答え:

私は2つの答えを組み合わせました:

def link_to_delete(model) 
  link_to t(:delete, scope: [:admin, :actions, model.pluralize.to_sym]), url_for(controller: model.pluralize.to_sym,...), method: :delete, class: "icon-delete", data: { confirm: t(:confirm, scope: [:admin, :confirmation, model.pluralize.to_sym) } 
end
4

2 に答える 2

0

url_forはあなたが望むものだと思います。

見てみましょう: http://apidock.com/rails/ActionDispatch/Routing/UrlFor/url_for

于 2013-08-02T00:44:27.077 に答える
0

model.pluralize.to_symの代わりにやってみませんか":#{model}s"

例:

1.9.2-p290 :005 > "person".pluralize.to_sym
 => :people
于 2013-08-02T00:41:08.600 に答える