Чому люди пропонують не використовувати змінну екземпляра для переглядів у Ruby on Rails


12

Чому я чую, що недобре ділитися змінними екземплярів між контролерами та видами. Мені це подобається, тому що я можу відразу через @ помітити, що щось відбувається від контролера. Я бачу приємний спосіб використання помічників у контролерах тут: http://www.stephencelis.com/2008/09/06/rails-controllers-views-and-variables.html . Але я використовую cancan для цієї порції.

Відповіді:


11

Ідея була викладена в кращих практиках рейкових систем: Замініть змінну екземпляра локальною змінною

В основному, якщо ви не використовуєте багато частин або маєте єдиний простий вид для кожного методу контролера, лише використання змінних примірників у представленні насправді не спричинить жодних проблем.

Тим не менш, якщо ви використовуєте безліч партій і, отже, у вашому контролері оголошено багато змінних екземплярів ..., це може бути менш заплутаним, якщо ви використовуєте альтернативу явного передачі контролера (екземпляра) -змінної часткам. Таким чином - під час роботи в частковому VIEW - у вас є одне явне посилання на змінну / об’єкт, з яким ви хочете працювати, з яким не поділяєтеся з частинами 'all', які включені у створення сторінки.

Зрештою, ви можете впоратися з цим так, як вам подобається поводитися, ніхто не скаже вам робити це інакше. Однак моя особиста думка полягає в тому, що мені подобається думка про явні посилання на мої частки / погляди, які не можна плутати з іншими змінними.


5

Ви можете отримати аналогію із globalзмінних чи змінних, що передаються посиланням, і розглядати частинки як функції. Таким чином, використання змінної екземпляра в значній мірі схоже на змінну, передану для функціонування в якості посилання з усіма профілями та мінусами:

# controller 
def index
  @var = 1
end

#view index.html.erb 
<%= @var %><br/>
<%= render 'foo' %><br/>
<%= @var %>

#partial _foo.html.erb
<%= @var = 2 %>

результат буде

1
2
2

Можливо, ви хочете такої поведінки, але в більшості випадків вам це не потрібно. І простіше вводити помилок таким чином і складніше їх відстежувати. Ось чому це рекомендується, оскільки воно розділяє сфери змінних, використовуваних у видах і частках:

#view index.html.erb 
<%= @var %><br/>
<%= render 'foo', var: @var %><br/>
<%= @var %>

#partial _foo.html.erb
<%= var = 2 %>

результат:

1
2
1

2
Це хороший момент, я не замислювався над мінливістю змінних. У мене було припущення, що контролер "представляє" змінні в представленнях, але змінні екземпляра точно можуть вводити помилки, якщо вони модифіковані.
Amala
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.