2013-06-22 9 views
8

左側にサイドバーがあり、プロジェクト、ブログなどのリンクを持つユーザーのダッシュボードページがあります。「プロジェクト」リンクなどのリンクをクリックすることができます。メインエリアでは、ページを更新することなく、プロジェクトのビューがロードされます(ビューはプロジェクトの箇条書きリストになります)。私はこれをAJAXで実現しようとしていますが、状況は機能していません。AJAX呼び出しが部分的にレンダリングされる3

これは、動作すると思われる方法です。

match '/dash' => 'users#show' 

そして、showアクションがusers_controller.rbに呼び出されます。/dashは、ユーザー#2にルーティングするように構成されてshow.html.erb

<%= link_to 'Projects', '/dash', remote: true %> 

で、サイドバーのリンクをユーザーがクリックするには、このようなconfig/routes.rbファイルで表示しますコントローラ:

def show 
    @user = User.find(params[:id]) 
    @projects = @user.projects 

    respond_to do |format| 
     format.html # renders show.html.erb 
     format.js # renders show.js.erb 
    end 
end 

ここで、show.js.erbが実行されます。私show.js.erbファイルには、この1行います

$('#ajax').html("<%= escape_javascript(render(:partial => 'projects/index')).html_safe %>"); 

そして、それは私のshow.html.erbに#ajax divのを修正することになっている:

<div id="ajax"> 
    <%= render :template => 'projects/index' %> 
</div> 

app/views/projects/index.html.rbはこのように、@projectsに取り、リストを与えます:これが動作していないので、

<% @projects.each do |project| %> 
    <p><%= project.name %></p> 
<% end %> 

もちろん、私は間違ったことをやっています。私は間違って何をしていますか?他の場所で変更する必要のあるコードはありますか?私はRails 3.2.13を使っているので、//=jquery//=jquery_ujsという行はapp/assets/javascripts/application.jsの下に必要なjQueryとAJAXの機能をインポートしているはずです。

答えて

11

問題は、show.js.erbファイルでは部分的にレンダリングしようとしていますが、部分的ではないファイルを渡しているということです。部分ファイルはアンダースコア_で始まります。

ので、コードの重複を避けるために、ここで私がやるだろうと何:も

# app/views/projects/show.js.erb 
$('#ajax').html("<%= escape_javascript(render :partial => 'index', :locals => { :projects => @projects }) %>"); 

# app/views/projects/index.html.erb 
<%= render :partial => 'index', :locals => { :projects => @projects } %> 

# app/views/projects/**_**index.html.erb 
# Include here the code that you previously had in index.html.erb 
# Don't forget to change @projects to projects 
<% projects.each do |project| %> 
    <p><%= project.name %></p> 
<% end %> 

、あなたはかなりのことでアクセスできるようにあなたのルートを必要は決してありませんよう、あなたは、あなたのルートでmatchを使用しないでくださいGETメソッドとPOSTメソッドの両方したがってmatchの代わりにgetを使用してみてください。

関連する問題