Лучшая практика. Передача переменных экземпляра или использование параметров в представлениях 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, '#'

Таким образом, метод ленив, оценивается только при его использовании.

Также посмотрите