ruby-on-rails 在Rails6中有没有更好的方式来编写私有消息

mmvthczy  于 2023-08-08  发布在  Ruby
关注(0)|答案(2)|浏览(133)

我有一个服务请求消息对象,它可以是私有的,这意味着它只对创建服务请求的用户和编写消息的人可见。下面的代码可以工作,但很混乱。有没有更好的方法来做到这一点,那就是更干净/干燥一点?

  1. <% m = @message %>
  2. <% if m.private == true %>
  3. <% if m.user_id == current_user.id || @service_request.user_id == current_user.id %>
  4. <div class="jumbotron">
  5. <%= render 'service_request_messages', service_request_message: m %>
  6. </div>
  7. <% end %>
  8. <% else %>
  9. <div class="jumbotron">
  10. <%= render 'service_request_messages', service_request_message: m %>
  11. </div>
  12. <% end %>

字符串
希望保持干燥

sbtkgmzw

sbtkgmzw1#

  1. <% if !m.private || current_user.id.in?([m.user_id, @service_request.user_id]) %>
  2. <div class="jumbotron">
  3. <%= render 'service_request_messages', service_request_message: m %>
  4. </div>
  5. <% end %>

字符串

nxagd54h

nxagd54h2#

如果private是列名,那么使用它可能不是个好主意
例如,在模型中,你不能轻易地访问private属性,因为它是保留的Ruby字
最好使用published
我建议这样的变体

  1. <% if m.published? || m.owner?(current_user) || @service_request.owner?(current_user) %>
  2. <div class="jumbotron">
  3. <%= render 'service_request_messages', service_request_message: m %>
  4. </div>
  5. <% end %>

字符串
您只需要在相应的实体中定义这些方法来比较用户id

相关问题