1

我遇到的情况是,用户能够研究一些技术并因此获得一些回报。现在,这些奖励有点像能够创造一些物品,获得生产提升等等。

我目前正在做的是在我的控制器中处理闪存消息和重定向。所以,想象一个案例,为了创造一个项目,你必须研究一种特定的技术。我的控制器就像:

def create

    flash[:error] = I18n.t('error.not_researched') and redirect_to research_url and return if not current_user.has_research?(research)
    ....
    ....
end 

好吧,当然这很好用,但我不确定这是做事的最佳方式。我想也许可以使用 before_create 过滤器来做到这一点,但是这样,我不能真正设置 flash 消息,它几乎超出了范围。

因此,我想问一下您将如何在最佳实践方面进行处理,以便代码尽可能 DRY 并且编写得尽可能好。

4

1 回答 1

1

实际上,问题不在于设置闪存消息。您可以通过在模型中进行验证,然后检查它是否保存在控制器中来做到这一点。

unless research.save
  flash[:error] = I18n.t('error.not_researched')
  redirect_to research_url
  return
end

您的问题是您需要访问current_user,这表明控制器是进行此检查的正确位置。

关于样式的旁注:我认为如果您将检查分成几行,您的代码会更清晰。

unless current_user.has_research?(research)
  flash[:error] = I18n.t('error.not_researched')
  redirect_to research_url
  return
end
于 2012-04-05T12:27:26.747 回答