4

更新:この問題が発生している理由を説明するこの他のスレッドを見つけました(ローカルレール変数をjavascriptに部分的に渡す)が、それを修正する手順がリストされていませんでした(または、少なくともスキップした手順が多すぎます)方法はまだわかりません。問題は、パーシャルがクリック イベントまでロードされないため、パーシャルに渡されるローカル変数が、new.html.erb がロードされたときに存在していたローカル変数と同じではないことです。 . それを回避することは可能ですか?ありがとう。

オリジナル:

リンクに関連付けられたクリック イベントが時々しか機能しないのですが、その理由がわかりません。ページをリロードせずにリンクをクリックすると、パーシャルがビューにレンダリングされるはずです。

これは私が現在持っているものです(これは機能していません):

comps_helper.rb:

def addRound(f)
  render "add_round", f: f
end

comps/new.html.erb

<div id="add_round"></div>
<%= link_to "Add round", addRoundLink_path, remote: true %>

addRoundLink.js.erb

$("#add_round").html("<%=j addRound(f) %>");

何が機能しますか:

  1. <%= addRound %> を使用して、new.html.erb から直接ヘルパー メソッドを呼び出すだけで動作します。しかし、ユーザーがフォームに好きなだけセクションを追加できるように、リンクがクリックされたときにトリガーされる必要があります。

  2. 上記のコードに「f」パラメーターが含まれていない場合、JavaScript はクリック時に機能します。たとえば、パーシャルを変更してテキストの文字列だけを含めると、リンクがクリックされたときにそのテキストがレンダリングされます。これは、javascript に「f」パラメーターを含めた方法に問題があると思わせます。しかし、「add_round」IDのdivがあるnew.html.erbにjavascriptがそのコードを挿入するだけではないので、なぜそうなのかわかりませんか?

注: リンクをクリックすると、JavaScript コンソールに次のように表示されます: GET http //0.0.0.0:3000/addRoundLink 500 (Internal Server Error)
jquery.js:8215

ありがとう。

4

1 に答える 1

3

fコントローラーアクションのコンテキストにのみ存在するため、機能していません。

ユーザーがリンクをクリックすると、JavaScript に対して新しい HTTP リクエストが作成されます。このリクエストを処理するコントローラ アクションは、ページをレンダリングしたものとは異なるためf、このコントローラ アクションを設定し、ローカルとして addRoundLink.js.erb に渡す必要があります。

サンプルコード

  • fモデルオブジェクト/インスタンスによって決定されると想定しています。

コントローラーで

   def add_round
        model = MyModel.find params[:id]
        f = model.determine_f

        render :partial => 'add_round', :locals => { :f => f }
   end

あなたの new.html.erb で

<%= link_to "Add Round", add_round_path(@model), :remote => true %>
于 2012-09-12T01:34:52.307 に答える