更新3:
これを読んだ人にとって、これが以下のアップデート2で期待どおりに機能しなかった理由です。ビューがすでにロードされた後にレンダリングされるパーシャルにローカル変数を渡す
誰かがその問題を解決する方法を知っているなら、私に知らせてください。
更新2:
引用符でjavascriptを更新しましたが、部分的に機能します... javascriptが機能するようになり、部分的なものだけがある限り、リンクをクリックするとページにテキストの文字列が表示されるという意味でテキストの文字列が含まれています。ただし、パーシャルにフォームフィールドコードが含まれていると、問題が発生します。
次のレンダリングコードをnew.html.erbビューのフォームに直接貼り付けるだけで、新しいフォームセクションが適切に生成されます。
<%= render "add_round", f: f %>
ただし、comps_helper.rbに同様のコードを含めて、link_toから参照しようとすると、機能しません。
comps_helper.rb内:
def addRound(f)
render "add_round", f: f
end
new.html.erbの場合:
<%= link_to "render it!", addRoundLink_path, remote: true %>
<div id="some_id"></div>
そして、addRoundLink.js.erbを次のように変更しました。
$("#some_id").html("<%=j addRound(f) %>"); #Is this the correct change to have made here?
その場合、link_toリンクをクリックしても何も起こりません。
何かご意見は?
更新されたコード:
返信いただきありがとうございます。次の変更を加えましたが、まだ機能していないようです。リンクはフォームの下部に表示されますが、クリックしても何も変更されません。私は何が欠けていますか?
ルート.rb:
resources :comps
match '/new_competition', :to => "comps#new"
get "/addRoundLink" => "comps#addRoundLink", :as => :addRoundLink
注:問題が発生する場合に備えて、「comps」に関連する他の2行を含めました。
comps_controller.rb:
def addRoundLink
respond_to do |format|
format.js
end
end
comps_helper.rb:
def addRound
render "add_round"
end
addRoundLink.js.erb:
$("#some_id").html(<%=j addRound %>);
comps / new.html.erb:
<%= link_to "render it!", addRoundLink_path, remote: true %>
<div id="some_id"></div>
ありがとう。
元の質問
まず、私はRailsを初めて使用します。私は同様の質問に対する多くの解決策を読んで試しましたが、これまでのところ何も機能していません。
railsform_forとfields_forでフォームを作成しました。フォームは新しい競争(comp)を作成します。競争には多くのラウンドがあります。フォームの上半分(form_forセクション)は入力として競技に関する詳細を受け入れ、フォームの下半分は各ラウンドに関する詳細(fields_forセクション)を受け入れます。フォームは、この基本形式で完全に機能します。
fields_forセクションにあるすべてのコードを取得し、部分的に配置しました。次に、フォームの下部に「新しいラウンドを追加」リンクを作成し、リンクが押されるたびにリンクの上に部分的に表示することを計画しました。これにより、新しいラウンドのフォームに新しいセクションが追加され、ユーザーは必要な数のラウンドを入力できるようになります。これは私が仕事をするのに苦労している部分です。
このコードをcomps_helperに追加しました:
def addNewRound
render "add_round"
end
これにより、ファイル/views/comps/_add_round.html.erbがレンダリングされます。
私の質問は、リンクがクリックされたときにこれをフォームにレンダリングするにはどうすればよいですか。私が行った調査で得られる限り、次のとおりです。
<%= link_to "Add new round", { }, :remote => true %>
addNewRoundメソッドを実行する{}に何が入るのか正確にはわかりません。そして、comps_controllerファイルに何を追加する必要があるのかわかりません。
助けてくれてありがとう。