Я пытаюсь получить набор переменных в контроллере приложения, чтобы он соответствовал макету приложения.
Если я использую:
@var = 'foo'
... макет приложения не знает, о чем я говорю
Если я использую глобальную переменную
$var = 'foo'
... работает макет приложения. Однако мои функциональные тесты не работают:
# application layout
# my var is an AR object
$var.name
# Stock functional test
class HomeControllerTest < ActionController::TestCase
test "should get index" do
get :index
assert_response :success
end
end
# test:functionals
ActionView::Template::Error: undefined method `name' for nil:NilClass
Мне нужна эта переменная, доступная для макета приложения (на каждой странице). Мысли? Нужно ли сделать этот сеанс var?
Обновление
Основываясь на нескольких других постах, которые я читаю, считается ли наилучшей практикой помещать их в помощник приложения, а затем вызывать их из макета?
# Application helper
def get_var
Product.first
end
# Application layout
<% @var = get_var %>
<!DOCTYPE html>
<html lang="en">
<head>
...
Это а) работает в моем браузере и б) проходит тесты. Это лучшая практика? Есть ли более простой / лучший способ?