Railsバージョン:3.2.1
Rubyバージョン:1.9.3p125
ブラウザ:Chrome 18.0.1025.162
開発OS:Mac OS / X Lion
サーバーOS:CentOS 5
link_to呼び出しで:remoteを使用して、AJAXを使用してHTMLコンテンツを要求し、ページのセクションに返されたコンテンツを入力できるようにしようとしています。
Railsがリンクを正しく配線していないようです。ブラウザはリンクを通常のリンクタグとして認識し、RailsUJSクリックイベントハンドラーを処理していないように見えます。
動作しているデータ確認に関連付けられたリンクがあるので、これはUJSが必要なワイヤアップの少なくとも一部を実行していることを示しています。
他のクリックイベントリスナーを同じリンクにアタッチして、AJAX呼び出しから返されたHTMLを表示するページのセクションを非表示/表示しています。
これが他の場所に投稿されている場合はお詫びしますが、私は数日間検索していて、この特定の問題に対処する解決策を見つけられませんでした。関連する記事をいくつか見ましたが、それらはすべてAJAX呼び出しが行われていることを前提としており、Railsのレンダリングフローまたはルーティングの問題がいくつかあります。私の場合、ワイヤアップはまったくないようです。
ここにいくつかのコードがあります:
ビュー内の私のリンク:
<%= link_to image_tag("icons/24x24/attachment.png"), task_notes_path(task), :class => "section-link task-notes-link", :title => "View recent notes", :remote => true, 'data-section' => "task-notes" %>
RoRによって生成された出力:
<a href="/tasks/7/notes" class="section-link task-notes-link" data-remote="true" data-section="task-notes" title="View recent notes"><img alt="Attachment" src="/assets/icons/24x24/attachment.png"></a>
/ task /:task_id/notesコントローラーコードは次のとおりです。
def index
store_return_to
@project = nil
@tasks = nil
if (params.has_key?(:project_id))
@project = Project::find(params[:project_id])
sort = [
{ :field => 'status', :direction => 'asc'},
{ :field => 'priority', :direction => 'asc' }
]
filter = { :status => Task::STATUS_ACTIVE.to_s }
@tasks = Task::filter_sort(:project => @project, :sort => sort, :filter => filter, :per_page => 0)
else
@task_sort = params.has_key?(:task_sort) ? params[:task_sort] : { :field => 'priority', :direction => 'asc'}
@task_filter = params.has_key?(:task_filter) ? params[:task_filter] : { :status => Task::STATUS_ACTIVE.to_s }
@task_search = params.has_key?(:task_search) ? params[:task_search] : ""
@tasks = Task::filter_sort(:search => params[:task_search], :sort => @task_sort, :filter => @task_filter, :page => params[:tasks_page], :per_page => 15)
end
respond_to do |format|
format.html # index.html.erb
format.js
format.json { render json: @tasks }
end
end
そして最後に、index.js.erbファイルの私のコード:
<% if (!@project.nil?) %>
$('#project-<%=@project.id%>-tasks').html('<%= escape_javascript(render(@tasks)) %>');
<% else %>
$('#project-tasks').html('<%= escape_javascript(render(@tasks)) %>');
<% end %>