0

ユーザーが追加リンクをクリックすると、URL が既に追加されている場合はアラートが表示されます。それ以外の場合は、新しいブックマークを追加するためのフォームが表示されます。以下のコードは、重複した URL をチェックするのに非常にうまく機能しますが、URL が重複していない場合、ブックマークの追加をレンダリングする方法がわかりません (この場合、ページは通常の非 ajax リクエストのように読み込まれます)。

これは表示中のリンクです

 <%= link_to "add", user_bookmark_add_path(current_user, bookmark), remote: true %>

リンクはコントローラー アクション add を呼び出します

# controllers/bookmarks_controller.rb
def add 
  @bookmark = Bookmark.find(params[:bookmark_id])
  respond_to do |format|
    format.js 
  end
end

ジャバスクリプトファイル

# views/bookmarks/add.js.erb
<% if duplicated_url? @bookmark.url %>
   alert("Duplicated")
<% else %>
   # how to render the new bookmark form here
<% end %>

なにか提案を ?ありがとう

4

3 に答える 3

0

新しいブックマーク フォームのパーシャルを作成します。

_form.html.erb

<%= form_for(bookmark) do |f| %>

  <%= f.text_field :name %>
  <%= f.submit "submit" %>

<% end %>

リンクに ID を追加する

.html.erb

 <%= link_to "add", user_bookmark_add_path(current_user, bookmark), remote: true, id: "bookmark" %>

リンクを部分的に置き換えます。

.js.erb

<% if duplicated_url? @bookmark.url %>
   alert("Duplicated")
<% else %>
   $("#bookmark").replaceWith("<%= j render "form", bookmark: Bookmark.new %>");
<% end %>
于 2012-12-26T15:54:56.053 に答える
0

add.js.erbファイルのコードの一部で、次のようにリストに追加 elseできます。appendpartial

$('#your_list').append(
  "<%= escape_javascript(render('your_item_of_the_table_partial')) %>"
);

これpartialは、リスト アイテム、テーブル行、コンテンツを含む div など、何でもかまいません。問題は、新しいコンテンツで画面に再レンダリングするための html のチャンクが必要になることです。

リスト項目のパーシャルの例:

# _bookmark_item.html.erb
<li><%= @bookmark.url %> </li>
于 2012-12-26T15:55:08.490 に答える
0

次のようなことを試してください:

$('#your_div_id').append('<%= escape_javascript(raw render :partial => 'your_form_partial') %>')

これにより、Ruby パーシャルのコンテンツが DOM に追加されます。

于 2012-12-26T15:56:10.263 に答える