私はこのトピックについて多くの研究を行いましたが、いくつかの論争があるようですので、私はあなたの意見を得たいと思っていました。ここに私の基本的な状況がある - 私は、Userモデルを持っている:行動のこの種のRails(モデルまたはヘルパー)で「リンク」メソッドを作成する最も良い方法は?
class User < ActiveRecord::Base
# User consists of first_name, last_name, and other fields
has_one :profile # 1-1 mapping between User and Profile
# Profile is a nested resource of User
# this is the method up for debate:
# this obviously doesn't work unless I include
# the necessary modules in this class
def link(*args)
link_to self.first_name, users_profile_path(self), args
end
end
私の推論は私の意見では、私のような何かをしたい、ということである:
代わり<%= @user.link %>
毎時
<%= link_to @user.name, users_profile_path(@user) ... %>
です。このリンクは、さまざまなビューで何千回も使用されます。私はこの「方法」を一元化して、変更が必要なときに一度変更できるようにしたいと思います。
しかし、この方法は絶対にMVCアーキテクチャに違反します。その他には、ヘルパーを使用することをお勧め:
module UsersHelper
def profile_link(user, *args)
link_to user.name, users_profile_path(user), args
end
end
さて、私が代わりにユーザーONメソッドとして呼び出す方法でユーザーをラップする必要があります。
私の意見では、より醜いです、<%= profile_link(@user) %>
後者の例。
私の質問は - それはより良いですか?それとも私が完全に気づいていないことを達成する方法はありますか?
ヘルパーは、そのための適切な場所です。 – Heikki
あなたは私を悩ましていた何かを釘付けにしました。問題の事実は、おそらくヘルパーの90%が、悪い習慣とはみなされていない場合、クラス自体に対して実際にはよりよく定義されるということです。私はあなたがこれに対して良い答えを見つけることを願っています。 – ryeguy
[cells](http://cells.rubyforge.org/examples.html)のチェックアウトを検討することもできます(例[here](http://nicksda.apotomo.de/2010/11/lets-再使用可能なサイドバーコンポーネントインレール3))。 – ryeguy