Я пытаюсь получить переменную, установленную в контроллере приложения, чтобы перейти к макету приложения.
Если я использую:
@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, доступный для макета приложения (каждая страница). Мысли? Должен ли я сделать этот сеанс var?
Update
Основываясь на нескольких других сообщениях, которые я читаю, считается, что лучше всего разместить их в помощнике приложения, а затем вызвать их из макета?
# Application helper
def get_var
Product.first
end
# Application layout
<% @var = get_var %>
<!DOCTYPE html>
<html lang="en">
<head>
...
Это а) работает в моем браузере и б) проходит тесты. Это лучшая практика? Есть ли более простой/лучший способ?