ユーザーの操作後にすべてのページがリロードされるのを避けるために、Ruby on Rails アプリケーションを Ajax 化しようとしています。
私は今、舞台裏で新しいアイデアを作成することができますが、作成された後にそれを表示することはできません.
これが私のコードです:
アイデア ビューのフォーム:
<div id="new_proposition_form" style="display:none">
<%= form_for(@new_proposition, :remote => true) do |f| %>
<%= f.text_field :title, :class => "proposition_input", :id => "new_proposition_input" %>
<%= f.hidden_field :created_by %>
<%= f.hidden_field :father_id %>
<%= f.hidden_field :procontra %>
<%= f.hidden_field :created_at %>
<% end %>
</div>
アイデア コントローラーでアクションを作成します。
def create
@idea = Idea.new(params[:idea])
@idea.created_at = Time.now
respond_to do |format|
if @idea.save
format.html { redirect_to play_path, :notice => 'Idea was successfully created.' }
format.json { render :json => @idea, :status => :created, :location => @idea }
format.js
else
format.html { render :action => "new" }
format.json { render :json => @idea.errors, :status => :unprocessable_entity }
end
end
end
アイデア ビューの create.js.erb :
$("<%= escape_javascript render(:file => 'ideas/new_proposition.html.erb') %>").insertBefore('#end_of_propositions_list');
ここで、「end_of_propositions_list」は、表示されたアイデア リストの一意の識別子です。
私が苦労しているのは次のとおりです。
アイデア ビューのnew_proposition.html.erbビューが次のような場合:
<div>
New proposition added
</div>
オブジェクトや変数を参照していないコードを使用すると、機能します。つまり、ユーザーは何が起こったかの確認を見ることができます。したがって、ブラウザーで開始されたリモート アクションが、部分ビューにヒットする JavaScript テンプレートにヒットするコントローラーにヒットすることがわかっています。
ここで、属性を取得してフォーマットを処理するパーシャルを使用して、新しく作成したアイデアを代わりに表示したいと思います。新しく作成されたアイデアの ID を、アイデア コントローラーの作成アクションから、format.js によって呼び出される create.js スクリプトに渡し、次にパーシャルに渡して、データベースからどのアイデアを取得するかを知る必要があると感じています。 .
コントローラーの作成アクションから create.js および部分ビューに渡されるこのパラメーターを処理する方法がわかりません。本当に助けていただければ幸いです。