0

在我的 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 很陌生,所以我不知道如何实现它。

4

1 回答 1

0

这样就行不通了。您需要响应 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

文件夹内容.js.erb:

$("#"+"<%=@folder.title %>").append('<%= j render :partial => 'contents', :locals => {:folder => @folder } %>');
于 2013-07-13T00:06:59.043 回答