Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 正确处理过滤器内闪存消息的方法_Ruby On Rails_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 正确处理过滤器内闪存消息的方法

Ruby on rails 正确处理过滤器内闪存消息的方法,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我的情况是,用户能够研究一些技术,并因此获得一些奖励。现在,这些奖励有点像能够创造一些物品,提高产量等等 我目前正在做的是在我的控制器中处理flash消息和重定向。所以,想象一下,为了创建一个项目,你必须研究一种特定的技术。我的控制器如下所示: def create flash[:error] = I18n.t('error.not_researched') and redirect_to research_url and return if not current_user.has_

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

我目前正在做的是在我的控制器中处理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消息,它几乎超出了范围


因此,我想问一下,在最佳实践方面,您将如何进行这项工作,以使代码尽可能枯燥,并尽可能编写良好。

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

除非research.save
flash[:error]=I18n.t('error.not_')
将\u重定向到搜索\u url
返回
结束
您案例中的问题是您需要访问
当前用户
,这表明控制器是执行此检查的正确位置

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

除非当前用户有研究?(研究)
flash[:error]=I18n.t('error.not_')
将\u重定向到搜索\u url
返回
结束

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

除非research.save
flash[:error]=I18n.t('error.not_')
将\u重定向到搜索\u url
返回
结束
您案例中的问题是您需要访问
当前用户
,这表明控制器是执行此检查的正确位置

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

除非当前用户有研究?(研究)
flash[:error]=I18n.t('error.not_')
将\u重定向到搜索\u url
返回
结束

如果我理解错了您的问题,请告诉我-显示flash消息通常在您可能使用的一个布局文件中完成。这样,所有视图都位于一个中心位置。你在控制器中所做的是正确的。不需要前置过滤器。请让我知道,如果你需要一个例子,我可以张贴一个。希望有帮助。请让我知道,如果我理解你的问题错误-显示闪光消息通常是在一个布局文件,你可能会使用。这样,所有视图都位于一个中心位置。你在控制器中所做的是正确的。不需要前置过滤器。请让我知道,如果你需要一个例子,我可以张贴一个。希望能有帮助。正是那个谢里夫。我实际上需要当前用户和验证无法提供的更多数据,对吗。我很高兴您也认为控制器似乎也是适合您的正确方式。我实际上使用单行程序,因为我的控制器中有多个检查,我不想在一个动作中有太多的行。我实际上需要当前用户和验证无法提供的更多数据,对吗。我很高兴您也认为控制器似乎也是适合您的正确方式。我实际上使用单行程序,因为我的控制器中有多个检查,我不想在一个动作中有太多的行。