Я провел много исследований по этой теме, и, похоже, возник спор, поэтому я хотел узнать ваше мнение.Вот моя базовая ситуация - у меня есть модель User:
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
Теперь я должен обернуть пользователя в метод вместо вызова его как метода для пользователя:
<%= profile_link(@user) %>
Что, на мой взгляд,, уродливее, чем последний пример.
Так что мой вопрос - что лучше ??Или есть способ сделать это, о чем я совершенно не знаю?