0

Rails 3.2アプリには、TwitterBootstrapのメディアオブジェクトコンポーネントを中心に構築されたインデックスビューがあります。これを整理して、コードの一部をプレゼンター( http://railscasts.com/episodes/287-presenters-from-scratch )に移動しようとしています。

レンダリングされたマークアップからdivが完全に消えるという奇妙な問題が発生しています。私のコードに間違いはありますか?

def render_object
  content_tag(:div, class: "row") do
    div_for(object, class: "object-container") do
      content_tag(:div, class: "media") do
        link_to(object, class: "pull-left") do
          image_tag(object.image_url(:thumb), class: "media-object") if object.image?
        end
        content_tag(:div, class: "media-body") do
          link_to(object.user.name, object.user) 
        end
      end
    end
  end
end

ページをロードすると、画像とそのhrefリンクがマークアップのどこにも表示されません。不思議なことに、.media-bodydivとそのコンテンツが存在します。

divを説明する3行をコメントアウトすると.media-body、リンクされた画像がレンダリングされます。

なぜそうなのかわかりませんか?

4

1 に答える 1

0

後から考えると、これに対する答えは明らかですが、それは長い間私を困惑させたので、他の人に役立つ場合に備えて答えを追加します。

基本的に、content_tagは、ruby関数と同様に、最後のアイテムのみを返します。したがって、秘密はリンクメソッドとコンテンツメソッドを連結することです。

def render_object
  content_tag(:div, class: "row") do
    div_for(object, class: "object-container") do
      content_tag(:div, class: "media") do
        html = link_to(object, class: "pull-left") do
          image_tag(object.image_url(:thumb), class: "media-object") if object.image?
        end
        html += content_tag(:div, class: "media-body") do
          link_to(object.user.name, object.user) 
        end
      end
    end
  end
end

注意してくださいhtml =

于 2013-05-28T16:50:55.463 に答える