15

アプリに ajax 検索フォームがある検索ページがあります。検索フォームは適切に機能し、パラメータをモデルに渡して検索をフィルタリングし、モデルが結果のコレクションを返します。検索が送信されると、@results がページに表示されます。各 @result には、次のようなアクションへのリンクがあります。

<%=link_to "Message", message_user_path(:id => user.id), :remote => true%>

コントローラー内のこのアクションは次のとおりです。

respond_to :js, :html
def message
  @user_id = params[:id]
  @user = User.find_by_id(@user_id)
  respond_to do |format|
    format.html
    format.js
  end
end

これは message.js.erb で応答します。これにより、メッセージ パネルがトリガーされ、ユーザーへのメッセージがポップアップ表示されます。これはすべて正しく機能しており、ログを確認すると、正しい get リクエストが送信され、正しい形式が処理されていることがわかります。

Started GET "/users/3/message"
Processing by UsersController#message as JS

ただし、ページを更新して以前に機能していたのと同じリンクをクリックしようとすると、テンプレートが見つかりませんというエラーが表示されます。ログを確認すると、2 つのリクエストが送信されていることがわかります。最初は html、次に同じ js リクエストです。

Started GET "/users/4/message"
Processing by StudentsController#message as HTML
...
Completed 406 Not Acceptable in 3ms (ActiveRecord: 1.0ms)

Started GET "/users/4/message"
Processing by StudentsController#message as JS

HTML リクエストは、テンプレートが見つからないというエラーをスローします。ページを更新すると、レールがリモート リンクへの html リクエストで応答しようとする理由を知っている人はいますか?
編集:routes.rb

resources :students do
    member do
      get 'message'
    end
end
4

5 に答える 5

8

:format => "js" を追加していたソルバー

だからあなたの場合:

<%=link_to "Message", message_user_path(:id => user.id, :format => "js"), :remote => true %>
于 2015-01-24T23:34:23.353 に答える
0

一般にlink_to、特定のボタンなどで使用する場合、ボタンを押すas jsと、コントローラーにリクエストが送信されますが、それぞれの .js.erb ファイルなども検索されます。

于 2015-01-15T20:46:32.410 に答える