12

Railsアプリ(3.2.8)とターボリンク(関連するかどうかは不明)が有効になっています。

  1. linkユーザーのショーページにいくつかの情報があります。(例:何かが変更されたという通知。)
  2. ユーザーがリンクをクリックすると、そのページにユーザーを誘導し
  3. 変更された要素を視覚的に強調表示します。

現在、私はそれを次のように処理することを計画しています:

次の形式になるようにリンクを作成します。

project2/comment.1453

と変更のタイプおよびそのIDnotifications controller,を取得するを作成します。したがって、理論的には、そのページのID1453のコメントにリダイレクトして強調表示したいと思います。問題は次のとおりです。リダイレクト後、コメントを強調表示するにはどうすればよいですか?projects2comment1453projects2

Notificationscontroller.rb(擬似コード!)

def show
  project = Project.find(params[:project_id])
  comment = Comment.find(params[:commment_id])
  redirect_to project AND highlight!
end

私の調査中にBackboneに出くわしましたが、BackbonesルーターはURLに関数(コメントの強調表示)で応答することでこの問題を解決できるようです。しかし、私はバックボーンの経験がありません。

この種の機能に対する一般的なアプローチが何であるかはわかりません。そして、間違った道をたどらないようにしたいと思います。あなたが私を助けることができれば素晴らしいでしょう。

編集:ちょっとした質問のようなもの:どのキャラクターに使用するのcomment.1453#良いかわかりませんか?(comment#1453

4

3 に答える 3

5

リダイレクト先のページにjavascriptを含める以外に、リダイレクト後にjavascriptを実行することはできません。

必要なのは、このリクエストから次の(リダイレクトされた)リクエストに情報を引き継ぐことです。

フラッシュはこれを行うための良い方法です。通常、テキストメッセージに使用します。

redirect_to project, notice: "Project foo bar message"

また

flash[:notice] = "Project foo bar message"
redirect_to project

フラッシュで他の識別子を使用し、JSONをそれらに保存することを妨げるものは何もありません。

flash[:highlight_ids] = "[12, 43, 472, 482]"
redirect_to project

次に、レイアウトまたはどこかで、このフラッシュメッセージをJavaScriptに抽出します。

var highlight_ids = <%= flash[:highlight_ids] %>;

次に、JavaScriptマジックを実行して、実際の要素を強調表示します。

于 2012-12-19T12:48:20.377 に答える
2

考えられる方法の1つ:

ID(およびコメントだけでなく強調表示する必要がある場合は可能なオブジェクトタイプ)をセッションに保存するか、Cookieに直接保存showします(擬似コードのアクション)

def show
  project = Project.find(params[:project_id])
  comment = Comment.find(params[:commment_id])
  cookies[:highlight_id] = comment.id
  cookies[:highlight_type] = 'Comment' # optionally
  redirect_to project
end

プロジェクトコントローラーshowアクション

def show
  ...
  if cookies[:highlight_id] and cookies[:highlight_type]
    @highlight_id = cookies[:highlight_id]
    @highlight_type = cookies[:highlight_type]
    cookies.delete[:highlight_id]
    cookies.delete[:highlight_type]
  end

そしてコメントビューで

<div class="some_class <%= highlight(@comment, @highlight_id, @highlight_type %>" ...

highlightのようなヘルパーはどこにありますか

def highlight(object, object_id, object_type)
  if object_id and object_type and object.is_a?(object_type.classify.constantize)
    'highlighted'
  end
end 
于 2012-12-19T12:49:00.827 に答える
0

この投稿に出くわし、Rails4.1で使用しているソリューションを追加することにしました。

class CoolController < ApplicationController
  respond_to :html, :js

  def controller_action
    # controller stuff

    respond_to do |format|
      format.html {
        return redirect_to my_redirect_path, notice: "Successfully updated payment method!"
      }
      format.js
    end
  end
end

指定されたjsファイルcontroller_action.js.erbが実行され、ページは正常ににリダイレクトされmy_redirect_pathます。

于 2021-09-02T20:09:06.303 に答える