使用AJAX加载部分传递值的Rails?

时间:2013-07-12 23:40:05

标签: ruby-on-rails ruby ajax

在我的Rails应用中,用户有文件夹,这些文件夹里面是他们可以添加的帖子。现在我在我的视图中显示了这样的文件夹:

<% current_user.folders.each do |folder| %>
                    <a href='#' id="addSubmissions">
                        <div id="post-container">
                            <%= folder.title %> <p id="created-time">Created <%= folder.created_at.strftime("%e/%-m") %></p>
                        </div>
                    </a>    
                <% end %>

我想要做的是在点击#addSubmissions链接时将与文件夹关联的提交加载到div中。我试过用它测试一下:

$('#addSubmissions').click(function(){
        $('#post-container').append('<%= render :partial => 'contents', :locals => {:folder => folder } %>');
    });

但似乎渲染代码实际上需要事先本地化。

_contents.html.erb 部分有效,非常简单:

<%= folder.title %>
<% folder.submissions.each do |i| %>
 <%= i.title %>
<% end %>

我怎么能这样做?同样,我希望能够单击文件夹的链接并将文件夹中的提交加载到视图中的div中。我认为AJAX可能是解决方案,但我对Ruby很新,所以我不知道如何实现它。

1 个答案:

答案 0 :(得分:0)

这样它就行不通了。你需要contoller方法,它响应JS,因为你正在获取纯ruby变量。

而不是:

<a href='#' id="addSubmissions">
你可以试试:

<%= link_to folder_content_path(folder), :remote=>true, :class=> "addSubmissions", :id=>folder.title %>
<div class="post-container" id="<%= folder.title %>">
  <%= folder.title %> <p id="created-time">Created <%= folder.created_at.strftime("%e/%-m") %></p>
</div>

或您想要的其他方法名称。另请注意,该ID对于页面应该是唯一的,否则您将无法获得预期的结果。在这里我使用文件夹名称作为ID,它可能是唯一的,并且很容易找到我们想用JS修改的div。

def folder_content
  @folder=Folder.find(params[:id])
  respond_to do |f|
    f.js
  end
end

folder_content.js.erb:

$("#"+"<%=@folder.title %>").append('<%= j render :partial => 'contents', :locals => {:folder => @folder } %>');