如何将多个部分模板合并到一个文件中?

时间:2011-07-08 09:45:42

标签: ruby-on-rails ruby-on-rails-3 erb

我正在使用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 个答案:

答案 0 :(得分:1)

我猜你在主布局有机会运行_form部分之前已经运行了_fragments部分,所以当你显示片段时,它们还没有被创建。

操作在布局之前呈现,而不是之后。从您的操作而不是从布局调用_fragments应该清楚这是否是问题所在。至少,我相信; - )

答案 1 :(得分:0)

您错过了第二个代码段中的=符号,该符号会告诉Rails显示返回的文本。

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