【问题标题】:How to merge multiple partial templates into one file?如何将多个部分模板合并到一个文件中?
【发布时间】:2011-10-01 03:34:51
【问题描述】:

我正在使用 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 %>

这种方式有什么问题? 还有其他更好的方法可以将多个部分模板写入一个文件吗?

【问题讨论】:

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


    【解决方案1】:

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

    动作在布局之前呈现,而不是之后。从您的操作而不是从布局中调用 _fragments 应该可以清楚地说明这是否是问题所在。至少,我是这么认为的 ;-)

    【讨论】:

      【解决方案2】:

      您在第二个 sn-p 中缺少 = 符号,它会告诉 Rails 显示返回的文本。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-12-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-21
        • 1970-01-01
        • 1970-01-01
        • 2022-11-29
        相关资源
        最近更新 更多