0

情况是当用户单击添加链接时,如果 url 已经添加,则会有一个警报,否则将显示一个添加新书签的表单。下面的代码非常适合检查重复的 url,但如果 url 不重复,我只是不知道如何呈现添加书签(在这种情况下,页面将像正常的非 ajax 请求一样加载)

这是视图中的链接

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

该链接将调用控制器操作添加

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

javascript文件

# 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 回答