アプリに 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