在我的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很新,所以我不知道如何实现它。
答案 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 } %>');