Как объединить несколько частичных шаблонов в один файл? - PullRequest
2 голосов
/ 08 июля 2011

Я использую Ruby on Rails 3 для создания своего веб-приложения. Я не хочу создавать файл шаблона для каждого крошечного частичного шаблона, поэтому я попытался объединить их в один файл, используя метод content_for, но он не работает.

Мои файлы шаблонов ERB выглядят следующим образом.

layout / _fragments.html.erb: содержит содержимое некоторых частичных шаблонов

<% content_for :twitter_checkbox do -%>
  <% can_post_twitter = current_user && current_user.twitter_oauth %>
  <% label_text = can_post_twitter ? "Post to Twitter" : "Set up your Twitter account" %>
  <%= label_tag :twitter, label_text %>
  <%= check_box_tag :twitter, 0, false, :disabled => !can_post_twitter %>
<%- end %>

<% content_for :other_content_of_partial_template do -%> # content of another partial template
...

Макеты / application.html.erb

<!DOCTYPE html>
<html>
  ...
  <body>
    <%= yield %>
  </body>
</html>
<%= render 'layouts/fragments', :formats => :erb %>

Макеты / _form.html.erb

<%= form_for(@entry) do |f| %>
  ...
  <%= content_for :twitter_checkbox %> # it shows nothing
<% end %>

Что не так с этим способом? Есть ли другие лучшие способы записать несколько частичных шаблонов в один файл?

Ответы [ 2 ]

1 голос
/ 08 июля 2011

Полагаю, вы запустили партиал _form до того, как у основного макета была возможность запустить партиал _fragments, поэтому при отображении фрагментов они еще не созданы.

Действие выполняется до макета, а не после. Вызов _fragments из вашего действия, а не из макета, должен прояснить, является ли это проблемой. По крайней мере, я так считаю; -)

0 голосов
/ 08 июля 2011

Во втором фрагменте отсутствует знак =, который указывает Rails отображать возвращаемый текст.

<%= form_for(@entry) do |f| %>
  ...
  <%= content_for :twitter_checkbox %> # Note <%= - it should now show stuff
<% end %>
...