Подтвердить что ты не робот

Передача переменной в частичную - 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) и перезапустил сервер несколько раз

Заранее благодарим за ваше время.

4b9b3361

Ответ 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 %>