我有一个应用程序,用户可以在其中提交提交内容,以及用于存储和组织提交内容的文件夹。在我看来,我显示了所有用户文件夹的列表,理想情况下,当用户单击文件夹时,与该文件夹关联的所有提交都会加载到视图中。
问题
我的观点是这样的:
<div id="submission-list-container">
<% current_user.folders.each do |folder| %>
<%= link_to folder_path(folder.id), :remote=> true, :id=>folder.id %>
<div class="post-container" id="<%= folder.id %>">
<%= folder.title %> <p id="created-time">Created <%= folder.created_at.strftime("%e/%-m") %></p>
</div>
<% end %>
</div>
Rails 循环遍历与 current_user 关联的每个文件夹并将其放入视图中。如您所见,我有一个link_to
指向show
文件夹模型操作的路径。我传入每个文件夹的 id。
应该发生的是它路由到文件夹控制器中的显示操作,如下所示:
def show
@folder = Folder.find(params[:id])
respond_to do |f|
f.js
f.json
end
end
超链接看起来像“/folders/1”,它会正确地路由到显示操作。但是,当我单击该链接时,我会在控制台中看到以下内容:
Processing by HomeController#index as JS
Parameters: {"id"=>"1"}
User Load (2.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = 2 LIMIT 1
Folder Load (1.7ms) SELECT "folders".* FROM "folders" WHERE "folders"."user_id" = 2
这显然是错误的。它应该使用我通过的 folder.id 加载文件夹,而不是 current_user id。
我还有一个名为 show.js.erb 的文件,它位于 /views/home。这个文件是为了在.post-container
类中注入一个部分(就在我为这个测试注入它的地方)。该文件如下所示:
$(".post-container").append('<%=j render :partial => 'contents', :locals => {:folder => folder } %>');
我不会发布我的部分,因为这篇文章已经很长了,但我已经测试过它并且知道它有效。最后,为了清楚起见,我做了一个rake routes
并得到了以下输出(与文件夹相关的所有内容):
folders GET /folders(.:format) folders#index
POST /folders(.:format) folders#create
new_folder GET /folders/new(.:format) folders#new
edit_folder GET /folders/:id/edit(.:format) folders#edit
folder GET /folders/:id(.:format) folders#show
PUT /folders/:id(.:format) folders#update
DELETE /folders/:id(.:format) folders#destroy
作为一个 Rails 新手,我试图一遍又一遍地调试这个问题,但无济于事。谷歌搜索也没有太大帮助,这就是我来找你们的原因。即使您不确定问题所在,也非常感谢您提供有关从哪里开始寻找的建议。
谢谢!