我正在使用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 %>
这种方式出了什么问题? 还有其他更好的方法可以将多个部分模板写入一个文件吗?
答案 0 :(得分:1)
我猜你在主布局有机会运行_form
部分之前已经运行了_fragments
部分,所以当你显示片段时,它们还没有被创建。
操作在布局之前呈现,而不是之后。从您的操作而不是从布局调用_fragments
应该清楚这是否是问题所在。至少,我相信; - )
答案 1 :(得分:0)
您错过了第二个代码段中的=
符号,该符号会告诉Rails显示返回的文本。
<%= form_for(@entry) do |f| %>
...
<%= content_for :twitter_checkbox %> # Note <%= - it should now show stuff
<% end %>