Лучшая практика. Передача переменных экземпляра или использование параметров в представлениях Ruby on Rails?
В соответствии со следующим примером, Какая наилучшая практика?
Случай 1
controller.rb
...
def index
...
@group = params[:group]
@team = params[:team]
@org = params[:org]
...
end
index.html.haml
= link_to @group, '#'
= link_to @team, '#'
= link_to @org, '#'
Случай 2
controller.rb
...
def index
...
...
end
index.html.haml
= link_to params[:group], '#'
= link_to params[:team], '#'
= link_to params[:org], '#'
Или, может быть, есть еще одна опция, например, передача только одной переменной экземпляра типа Hash...
Спасибо!
Ответы
Ответ 1
Как правило, лучше разделить ваши параметры как переменные экземпляра, особенно если вам нужно немного очистить их. Использование params
непосредственно внутри представления немного беспорядочно и приводит к ненужному привязке представления к структуре входящих параметров.
Это задание контроллера промежуточно между входящими параметрами и самим представлением. Он должен преобразовываться из одного формата в другой, чтобы вы могли внести изменения в параметры без влияния на представление и на представление без изменения требований к параметрам.
Необычно проходить через параметры без какой-либо обработки на них. В большинстве случаев входящие параметры используются для извлечения записей из базы данных или используются в маршрутизации в некоторой емкости.
Прослеживание трех параметров, передаваемых, а затем используемых буквально на странице, не является обычным прецедентом. Почему вы передаете их вместо того, чтобы передавать ссылку на одну из этих вещей, которые можно использовать для определения других?
Например:
@team = Team.find_by_slug(params[:team_id])
@org = @team.org
@group = @team.group
Так создается большинство приложений Rails.
Ответ 2
Если вам нужно выбрать между этими двумя определенными # 1, представление не должно использовать хеш params, потому что это сочетание проблем. Это роль контроллера, чтобы справиться с хэшем params и подготовить все для представления.
Я думаю, что даже более эффективная практика заключается не в том, чтобы использовать переменные экземпляра вообще, а просто для использования вспомогательных методов в ваших контроллерах:
def group
params[:group]
end
helper_method :group
И в представлении:
= link_to group, '#'
Таким образом, метод ленив, оценивается только при его использовании.
Также посмотрите