ruby-on-rails - RoR - 如何让管理员在索引页面上显示单个用户文档?
问题描述
我有users#show页面作为管理员,其中列出了所有用户,如下所示:
<% @users.each do |user| %>
<div class="row row-cols-3">
<div class="col-2">
<%= image_tag user.avatar.variant(resize_to_fill: [100, 100]), style: "border-radius: 50%;" %><br>
</div>
<div class="col-4">
<p>user name: <%= user.first_name %> <%= user.last_name %></p>
<p>user email: <%= user.email %></p>
<p></p>
</div>
<div class="col-4">
<p>user id: <%= user.id %></p>
<p></p>
</div>
<div class="col-2">
<%= link_to "Documents", documents_path {:user_id => "#{user.id}" } , class: "btn btn-primary py-1.5 px-3" %>
</div>
</div>
<% end %>
我希望链接到“文档”传递个人 user_id,以便在索引视图中,它只呈现他们的文档。
def index
if current_user.admin?
@user = User.find(params[:user_id])
@documents = @user.documents
else
unless @documents = current_user.documents.where(user_id: current_user).nil?
@documents = current_user.documents.where(user_id: current_user)
end
end
end
我怎样才能做到这一点?
解决方案
首先,您可以简化编写路线的方式documents_path(user_id: user.id)
:
<%= link_to "Documents", documents_path(user_id: user.id), class: "btn btn-primary py-1.5 px-3" %>
在控制器上:
def index
@documents = Document.where(user_id: params[:user_id]) if params[:user_id]
# more logic
end
您不需要测试 nil,因为如果您没有所选用户的文档,查询将返回一个空结构。你可能想any?
用它:
<% if @documents.any? %>
<!-- show table -->
<% else %>
<strong>No documents to display</strong>
<% end %>
我想强调一下,您需要决定是否可以信任用户 ID。例如,如果您在多租户应用程序中,您可能需要确保您可以访问该用户:
def index
user = Account.users.find(params[:user_id])
@documents = Document.where(user_id: user.id) if params[:user_id]
# more logic
end
推荐阅读
- javascript - 如何在树布局中切换隐藏和显示子元素?
- node.js - 如何在 MVC 架构中使用 postgresql 制作 passportjs
- c++ - 为什么在 C++ 中这个 double 值乘以 2 会出现计算错误?
- c++ - 删除 C++/GNU 中的“由于未打包的非 POD 字段而忽略打包属性”警告
- node.js - 如何从 Blob 存储中复制文件夹?
- forms - Flutter 表单验证器装饰?
- javascript - 如何使用数组的结果更新对象中的值
- algorithm - GridView 颜色抖动算法
- database - 具有排序属性的 KDB 表的插入操作复杂度
- c# - 命名参数规范必须出现在所有固定参数都指定后,同时有两个路由。MapRoute