案例是当用户点击添加链接时,如果已添加网址,则会有提醒,否则将显示添加新书签的表单。下面的代码非常适合检查重复的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 %>
有什么建议吗?感谢
答案 0 :(得分: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 %>
答案 1 :(得分:0)
在add.js.erb
文件的else
部分代码中,您可以append
partial
添加到您的列表中,如下所示:
$('#your_list').append(
"<%= escape_javascript(render('your_item_of_the_table_partial')) %>"
);
此partial
可以是列表项,表格行,包含内容的div,任何内容。问题是,您需要使用新内容在屏幕上重新呈现一大块html。
列表项partial的示例:
# _bookmark_item.html.erb
<li><%= @bookmark.url %> </li>
答案 2 :(得分:0)
尝试这样的事情:
$('#your_div_id').append('<%= escape_javascript(raw render :partial => 'your_form_partial') %>')
这会将ruby partial的内容添加到DOM中。