ruby-on-rails - 显示和隐藏按钮的多种条件

标签 ruby-on-rails conditional-statements

我正在尝试制作一个“更新和删除”按钮,该按钮仅在用户创建帖子或用户或版主 AND/OR 版主时才会显示。

我现在的posthelper是

  def user_is_authorized_for_post?(post)
    current_user && (current_user == post.user || current_user.admin?) 
  end

我的按钮是:

<% if user_is_authorized_for_post?(@post) %>
<%= link_to "Edit", edit_topic_post_path(@post.topic, @post), class: 'btn btn-success' %>
<%= link_to "Delete Post", [@post.topic, @post], method: :delete, class: 'btn btn-danger', data: { confirm: 'Are you sure you want to delete this post?' } %>
<% end %>

更新:我将 PostsHelper 更新为:

  def user_is_authorized_for_post?(post)
    current_user && (current_user == post.user || current_user.admin?)  || (current_user == post.user || current_user.moderator?)
  end

它有效,但我的问题是,是否有更好的编码方法,因为我觉得它太长了。

最佳答案

是的,有一种更短的写法。

您可以使用保护子句来缩短方法定义:

def user_is_authorized_for_post?(post)
  return false unless current_user # the aforementioned guard clause
  current_user == post.user || current_user.admin? || current_user.moderator?
end

关于ruby-on-rails - 显示和隐藏按钮的多种条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35002049/

相关文章:

ruby-on-rails - 为 Web 应用程序实现细粒度授权的最佳方法?

ruby-on-rails - 在 Grape gem 中设置状态代码

javascript - 如何修复“未定义”错误的 "Uncaught TypeError: Cannot read property ' 滚动高度'

loops - "single-entry"和 "single-exit"对于语句意味着什么?

python - 如何向 pandas df 添加条件列

clojure - 在 Clojure 中使用多方法而不是 cond 有什么好处?

ruby-on-rails - 将外部 .js 文件添加到新的 Rails 6 Web 应用程序

ruby-on-rails - 如何在 Rails 中添加自定义 HTTP 响应 header ?

javascript - 如何为下面的代码创建一组新的列而不是行?

azure - Docker-compose,条件语句? (例如系统相关驱动程序)