我遇到的情况是用户能够研究某些技术并获得一些奖励。现在,这些奖励有点像能够创造一些物品,获得生产提升等等。
我目前正在做的是处理我的控制器中的Flash消息和重定向。因此,想象一下,为了创建项目,您必须研究特定技术。我的控制器就像:
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消息,它几乎超出了范围。
因此,我想问一下如何根据最佳实践进行处理,以便代码尽可能干净并且编写得很好。
答案 0 :(得分:1)
实际上,问题不在于设置Flash消息。您可以通过在模型中进行验证,然后检查它是否保存在控制器中来完成此操作。
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