Rails:如何在AJAX中传递视图控制器?

时间:2012-12-26 15:33:53

标签: ruby-on-rails

案例是当用户点击添加链接时,如果已添加网址,则会有提醒,否则将显示添加新书签的表单。下面的代码非常适合检查重复的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 %>

有什么建议吗?感谢

3 个答案:

答案 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中。