あなたがしていることはエキサイティングかもしれませんが、それはクライアント - サーバー Web アプリケーションでは不可能です。
Web アプリケーションの基本を理解し、サーバー側のコードとクライアント側のコードを分ける線を理解する必要があります。
Ruby (Rails) - サーバー側: これは、HTML または JS または CSS を生成し、この HTML/JS/CSS がクライアント (ブラウザー) に送信されることを意味します。ブラウザでは、HTML が解析されて画面に描画されます。次に JavaScript コードが実行され、送信された HTML を使用して必要なことを実行します。この JavaScript は、サーバー上の Ruby コードに直接アクセスできません。
大丈夫。あなたが何をしたか見てみましょう。
$(document).click(function(){
<% query($("#tooltip b").text();) %>
});
わかった。クリック ハンドラー内に ERB スクリプトレットを追加しましたdocument
(なぜこれを行うのですか?)。わかりました、あなたの JavaScript エラーについて話すつもりはありません。ここでサーバーとクライアントの問題に対処しましょう。
これはあなたが期待することです:
Webページがロードされた後、 jQuery#tooltip b
の機能を使用して内部のテキストが抽出され、Rubyヘルパーtext
に渡されquery
て何かを実行します.
本当に起こること
このページが Rails によって生成されると (これはサーバーで発生し、JAVASCRIPT は実行されないことに注意してください。表示されるのは、Ruby を使用して埋め込まれたプレーン テキストだけです<% %>
)、クエリ ヘルパーが呼び出され、その引数は this になります$("#tooltip b").text();
。この JavaScript はサーバーでは実行されないと言いました。したがって、これはクエリに渡され、ruby は何が何であるかを知りません$("#tooltip b").text();
。これは文字列ではないため (引用符で囲まれていないことを確認してください)、Ruby はおそらく構文エラーをスローします。
つまり、結論は!JQuery で内容を取得#tooltip b
し、それを Ruby 関数に渡します。この JavaScript 自体が Ruby によって生成され、この HTML 応答が構築されてクライアントのブラウザー (Ruby ランタイムがない) に送信された後にのみ、JavaScript が実行されるため、これは発生しません。
お分かりできると良いのですが。これを読んでください: https://softwareengineering.stackexchange.com/questions/171203/what-are-the-difference-between-server-side-and-client-side-programming
大丈夫。それでは、どうやってこれを達成しますか。覚えて?Rubyコードに「直接」アクセスすることはできないと言いました。どうにかして間接的にできるということですか?はい!コメントで提案したように、Ajax を使用します。
メソッドの呼び出しに役立つアクションを作成する必要がありますquery
。次に、作成したばかりのアクションに対応する URL に対して AJAX 呼び出しを実行し、結果を$("#tooltip b").text();
データとして渡す必要があります。アクションで params ハッシュからこのデータを取得し、それをヘルパーに渡して処理を行います。必要に応じて、結果を js または json として返します。
手順:
- Rails でアクションを作成し、このアクションにアクセスするためのルートを追加します。
- アクション内で、クライアント側から送信されたデータを
params
ハッシュから取得します。これを行う方法を知っていると思います。そして、それをクエリ ヘルパー メソッドに渡します。(これを機能させるには、コントローラーにヘルパー モジュールを含める必要があります)
respond_to
orを使用して、状況に応じてrender
結果を返しjson
ます。js
クライアント側で、アクションの URL に ajax 呼び出しを追加し、データを渡します。成功のコールバックを追加すると、これはアクションから送信したものをすべて受け取ります。あなたがやりたいことをするためにそれを使ってください。
ウェブ上のリソースを参照してください。ここはチュートリアルを書く場所ではありません。