如何正确使用此参数?

how do I use this parameter correctly?

我的 rails 应用程序中有一个方法。

  def current_user_can_edit?(model)
    user_signed_in? && (
      model.user == current_user ||
      (model.try(:post).present? && model.post.user == current_user)
    )
  end

需要该方法来检查编辑模型的可能性。我的应用程序中有 posts 和事件。我想动态地用 post 或事件代替一个选择,而不是静态的 post.

怎样才能正确的写一个方法,才不会提出很多条件呢?例如,在这里:



  def current_user_can_edit?(model, action)
    if action.class.to_s == 'Post':
      user_signed_in? && (
        model.user == current_user ||
        (model.try(:post).present? && model.post.user == current_user)
      )
    elsif action.class.to_s == 'Event':
      user_signed_in? && (
        model.user == current_user ||
        (model.try(:event).present? && model.event.user == current_user)
      )
    end
  end

在您的方法逻辑中,表达式:

model.try(:post).present? && model.post.user == current_user

可以通过链接两个 try 调用来组合:

model.try(:post).try(:user) == current_user

现在您可以将 :post 替换为计算值:

model.try(action.class.to_s.downcase).try(:user) == current_user

完整代码:

def current_user_can_edit?(model, action)
  user_signed_in? && (
    model.user == current_user ||
    model.try(action.class.to_s.downcase).try(:user) == current_user
  )
end

你也可以使用一些保护子句:

def current_user_can_edit?(model, action)
  return unless user_signed_in?
  return true if model.user == current_user

  model.try(action.class.to_s.downcase).try(:user) == current_user
end

我假设 action.class.to_s returns "Post"。如果将 :post 作为方法的第二个参数传递,代码当然会更简单。