2011-01-01 5 views
0

私のアプリケーションレイアウトには、ナビゲーションdivと、部分として構築されたコンテンツdivが含まれています。私はajaxを使いたいので、ある人がナビゲーションdiv内のリンクをクリックするたびに、そのページの内容が更新せずにcontent divにレンダリングされるようにします。私はこれを正しく行うには混乱しています...レールのnoobのための任意のヘルプ???事前のおかげで〜link_to_remoteにrjsを使用すると混乱する

application.html.erb

<body> 
    <div id="container"> 
    <%= render 'layouts/header' %> 
    <%= render 'layouts/content'%> 
    <%= render 'layouts/footer' %> 
    </div> 
</body> 

_header.html.erb

<%= link_to_remote "Home", :url => { :controller => "pages", :action => "home" } %> 

_content.html.erb

<div id="content"> 
    <%= yield %> 
</div> 

pages_controller.rb

def home 
    @title = "Home" 
    respond_to do |format| 
    format.js 
    end 
end 

home.rjs

page.replace_html :container, :partial => 'layouts/content' 
+1

FYI: 'link_to_remote'はこれを行う2つの方法です。 Rails 3では 'link_to ...、:remote => true'が使われています。あなたの問題について:FirefoxのFirebugプラグインを使用し、コンソールを起動します。ここでAjaxリクエストを追跡できます。コントローラー側にエラーがある場合、それは応答に含まれます。 – crispy

+0

これは非常に参考になりました。私は今日これを見つけようとしていました。 –

答えて

0

は 'home.js.rjs' から 'home.rjs' を名前を変更してください。他のすべては正しいように見えます。あなたはどんなエラーを出していますか?

+0

お返事いただきありがとうございます。私が受け取ったエラー: { Element.update( "container"、 "

\n \n \n
\ n");} catch(e){アラート( 'RJSエラー:\ n \ n' + e.toString()); alert( 'Element.update(\ "container \"、\ "
\\n \\n \\n
\\ n \");'); eを投げる} – thedeepfield

0

試してみてください。

pages_controller.rb

def home 
    @title = "Home" 
    respond_to do |format| 
    format.js { 
     render(:update) do |page| 
     page.replace 'content', :partial => 'layouts/content'  
     end 
    } 
    end 
end 

あなたは余分なRJSファイルは必要ありません。またFYIでは、DBに@titleを保存する場合は、最新のデータを取得するためにrespond_toの前に@ title.reloadを実行する必要があります。ファイヤーバグに関する上記のコメントは役に立ちます。

関連する問題