2

ユーザーの操作後にすべてのページがリロードされるのを避けるために、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 および部分ビューに渡されるこのパラメーターを処理する方法がわかりません。本当に助けていただければ幸いです。

4

2 に答える 2

2

似合いそう…?次に行うことは、インスタンス変数 @idea をコントローラーからパーシャルに渡すことです。

$("<%= escape_javascript render(
    :file => 'ideas/new_proposition.html.erb', 
    :idea => @idea) %>")
.insertBefore('#end_of_propositions_list');

次に、ビューで @idea にアクセスします。

<div>New proposition added</div>
<div>Title: <%= @idea.title => </div>

それが役立つことを願っています

于 2012-11-20T10:42:43.603 に答える
0

そのコントローラーによってレンダリングされたビューでは、@ を使用して変数にアクセスできるため、create.js では @idea.id に直接アクセスできます。

于 2012-11-20T09:29:02.053 に答える