2011-07-08 21 views
2

Ruby on Rails 3を使用してWebアプリケーションを作成しています。 小さな部分テンプレートごとにテンプレートファイルを作成したくないので、content_forメソッドを使ってファイルを1つのファイルにマージしようとしましたが、動作しません。複数の部分テンプレートを1つのファイルにマージするにはどうすればよいですか?

私のERBテンプレートファイルは以下の通りです。

レイアウト/ _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 %> 
の内容が含まれています

この方法で何が問題になりますか? 複数の部分テンプレートを1つのファイルに書き込む他の方法がありますか?

答えて

0

返されたテキストを表示するようにRailsに指示する2番目のスニペットに=記号がありません。私はあなたのメインのレイアウトは、あなたが断片を表示するときに、彼らはまだ作成されていない。、_fragments部分を実行する機会があった前に、あなたは_form部分を実行したとし

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

ありがとう、私はそれを修正しましたが、まだ何も表示されません。 – yaotti

1

アクションは、レイアウトの前にレンダリングされます。レイアウトの代わりにアクションから_fragmentsを呼び出すと、これが問題かどうかが明確になるはずです。少なくとも、私はそう信じています;-)

関連する問題