Передача переменной в частичную - undefined Локальная ошибка или ошибка метода
Вот код, на мой взгляд, для вызова частичного:
<%= render(:partial => "tabs", :locals => {:class_Name => "Science", :y => 36}) %>
и теперь вот что в _tabs.html.erb:
<div>
<h1> <%= class_Name %> </h1>
</div>
Я ожидаю вывод HTML:
<div>
<h1> Science </h1>
</div>
Но вместо этого я получаю ошибку:
undefined local variable or method `class_Name' for #<#<Class:0x007f873b156c28>:0x007f873b1f9540>
Я закрыл и перезапустил Aptana (используемая среда IDE) и перезапустил сервер несколько раз
Заранее благодарим за ваше время.
Ответы
Ответ 1
Я заметил, что если бы я не включил "partial:" перед моим частичным путем, например:
<%= render 'my_partial', :locals => {:class_Name => "Science", :y => 36} %>
Мне нужно было использовать символ hash + в моем частичном доступе для получения желаемых значений, как отмечали другие.
<div>
<h1> <%= locals[:class_Name] %> has a y value of <%= locals[:y] %></h1>
</div>
Однако, включая "partial:" до моего частичного пути:
<% render partial: 'my_partial', :locals => {:class_Name => 'Science', :y => 36 } %>
... позволил мне просто вызвать хэш-значения напрямую.
<div>
<h1><%= class_Name %> has a y value of <%= y %></h1>
</div>
Просто что-то, о чем нужно помнить, этот вопрос несколько раз подстегнул меня, когда я пытаюсь отправить хэши locals на мои частичные.
Ответ 2
Если вы используете термин partial:
в своем рендере, например, так:
<% render partial: 'your_partial', locals: {foo: 'Biggs', bar: 'Wedge'} %>
Тогда ваши локальные жители будут доступны просто как foo
и bar
, непосредственно доступными таким образом:
<%= foo %> //returns Biggs
<%= bar %> //returns Wedge
Однако, если вы НЕ, используя термин partials:
в вашем рендеринге, например, так:
<% render 'your_partial', locals: {foo: 'Biggs', bar: 'Wedge'} %>
Тогда ваши локальные жители будут доступны в качестве членов locals
, доступных таким образом:
<% locals[:foo] %> //returns Biggs
<% locals[:bar] %> //returns Wedge
Ответ 3
Он отлично работает со мной.. где находится ваш _tabs.html.erb
в?
Ответ 4
Попробуйте что-то вроде этого:
<%= render partial: "form" , locals:{ name_you_want_use_in_partial: @varialble_to_pass } %>
У меня была та же проблема.
Поэтому я просмотрел документацию Ruby on Rails - прохождение локального..., и я использовал fllowing нотацию - теперь он работает:)
Ответ 5
Это случилось со мной тоже. Я использовал Middleman, и он работал нормально, используя middleman server
, но когда я строил свой сайт, используя middleman build
, у меня была ошибка, упомянутая в вопросе. Я перепробовал все методы, описанные выше, но ни один из них не сработал. Оказывается, что на этапе сборки посредник пытался также построить частичные файлы в виде отдельного html файла, что привело к ошибке. Причина этого в том, что я забыл поставить префикс имени файла с подчеркиванием, чтобы исключить его из процесса сборки. Если все остальное терпит неудачу, просто оберните ваш код в оператор if в частичную строку следующим образом:
<% if defined?(class_Name) %>
...
<% end %>