0

Rails アプリケーションで、投稿を保存して「保存済み」という通知を表示する方法を探しています。どこにもリダイレクトせずに。

コントローラーでこれを行うことはできますか、それとも Ajax を使用する必要がありますか? Ajax を使用する必要がある場合、簡単に実装する方法はありますか?

コントローラーの作成および更新アクションは次のとおりです。

def create
  @document = current_user.documents.build(params[:document])

  if @document.save
    redirect_to @document.edit, notice: 'Saved'
  else
    render action: "new"
  end
end

def update
  @document = current_user.documents.find_by_url_id(params[:id])

  if @document.update_attributes(params[:document])
    redirect_to @document, notice: 'Saved'
  else
    render action: "edit"
  end
end
4

2 に答える 2

0

新しいコントローラーアクションを作成したくない場合(おそらく作成しない場合)は、作成アクションと更新アクションを次のように設定することをお勧めします。

def create
  @document = current_user.documents.build(params[:document])

  if @flag = @document.save
    respond_to do |format|
      format.html
      format.js
    end
  else
    render action: "new"
  end
end

def update
  @document = current_user.documents.find_by_url_id(params[:id])

  if @flag = @document.update_attributes(params[:document])
    respond_to do |format|
      format.html
      format.js
    end
  else
    render action: "edit"
  end
end

次に、app / views / document / create.js.erbで:

var results_html;
var status;

<% if @flag %>
  results_html = $('<%= j(render("document"))%>');
  status = "success";
<% else %>
  results_html = $('');
  status = "failure";
<% end %>

$('destination').append(results_html); //assuming you're inserting a list item or some content besides the alert onto the page

alert(status); // replace this with your actual alert code

およびupdate.js.erb:

var results_html;
var status;

<% if @flag %>
  results_html = $('<%= j(render("document"))%>');
  status = "success";
<% else %>
  results_html = $('');
  status = "failure";
<% end %>

$('#<%= @document.id %>').replaceWith(results_html); //assuming you're replacing a list item or some content besides the alert onto the page.  also, make sure you're searching for the correct element id

alert(status); // replace this with your actual alert code

お役に立てれば。重要なのは、railsを使用すると、コントローラーアクションのさまざまなアクセス方法に対してさまざまなテンプレートを定義できることです。AJAXリクエストを行うと、デフォルトでjs.erbビューが表示されます。これにより、サーバーから返されたときに実行されるjavascriptを返すことで、現在のページを操作できます。

于 2012-12-14T03:01:16.143 に答える
0

「新しいドキュメント」フォームを「ドキュメントの編集」フォームに置き換えようとしているだけでなく、保存されたことを示すアラートを表示しようとしているようです。

正直なところ、おそらくこれを行う最も簡単な方法は、jQuery を使用してフォーム全体を部分的に置き換えることです。これは最もスリムではなく、クライアント側ですべての Javascript を実行する方法がありますが、これで始めることができます。

と呼ばれるパーシャルに「新しいドキュメント」フォームがあると仮定して、_new.html.erbというファイルを作成し、create.js.erbこれを入れます。

$edit_form = "<%= escape_javascript(render :partial => 'new', :locals => {document: @document}) %>"
$("#document_form_container").html($edit_form)

次に、フォームがタグに含ま:remote => trueれていることを確認します。form_for

于 2012-12-13T20:52:49.873 に答える