Ответ 1
<%= render partial: "image_tag", locals: {image: i} %>
заключается в том, как передать переменные частичным.
У меня есть представление, которое отображает несколько изображений и теги связанных с ними изображений. Я решил использовать частичный вид для каждого изображения и его тегов, но у меня возникли проблемы с передачей объекта изображения в частичный вид. Вот основной код, соответствующий соответствующему виду:
<table>
<% @images.each do |i| %>
<tr>
<%= render :partial => :image_tag, :image => i %>
</tr>
<% end %>
</table>
Вот код с частичным представлением (частичный вид называется _image_tag.html.erb):
<table>
<%= image.id %>
<%= image_tag image.src %>
</table>
Я прочитал в этом потоке, который я могу передать в объекте изображения так, как я это делаю сейчас. Я попытался передать id с помощью хэша опций метода рендеринга, и это тоже не сработало. Ошибка, которую я получаю:
undefined method `model_name' for Symbol:Class
центрируется вокруг строки, где я вызываю render: частичный в основном представлении.
<%= render partial: "image_tag", locals: {image: i} %>
заключается в том, как передать переменные частичным.
Что-то еще нужно учитывать для тех, у кого может возникнуть проблема с отправкой значений (-ов) в частичное. Если вы пропустили "partial:" до вашего частичного пути, например...:
<%= render 'my_partial', :locals => {:greeting => 'Hello world', :x => 36} %>
... похоже, что вы не сможете напрямую получить доступ к значениям хеш-мест. Скорее, вам нужно будет сделать следующее:
<div>
<h1> <%= locals[:greeting] %> , my x value is <%= locals[:x] %> </h1>
</div>
Однако , включая "partial:" , перед вашим неполным путем, например:
<%= render partial: 'my_partial', :locals => {:greeting => 'Hello world', :x => 36} %>
... позволяет вам напрямую получать доступ к значениям хэша, например:
<div>
<h1> <%= greeting %> , my x value is <%= x %> </h1>
</div>
Просто что-то, что я могу рассмотреть, я столкнулся с этой проблемой при попытке получить доступ к значениям хэша locals и понял, что я пропустил компонент "partial:" .
Вы также можете передать весь объект частичному, как это:
<%= render :partial => "partialpath", :object => :image %>
Вы заменили бы я изображением в вашем случае и частичным путем с тем, что вы называете частичным. Внутри частичного доступа он будет иметь доступ к локальной переменной с тем же именем, что и имя partials. Поэтому, если ваше имя частичного изображения является "изображением", то локальное переменное изображение будет объектом, в котором вы проходите.
EDIT: просмотр направляющих рельсов выглядит как в рельсах 3: объект теперь доступен как переменная экземпляра вместо локального, поэтому @image будет тем, что вы используете в частичном.