我应该在Rails中的控制器中进行验证吗?

时间:2017-02-13 09:53:59

标签: ruby-on-rails validation

我有一个实例,我将对资源进行某些验证,但不会对其他资源进行某些验证,其中两个资源映射到同一模型。

具体而言,我有一个与竞赛相关联的导出模型,我在该竞赛中构建了所有用户的导出。因此,自然会有一个确认,以确保附加竞争。但是,客户希望能够在给定时间构建所有用户导出,并使其像竞争导出一样工作。

我计划为其使用两个独立的资源(路由,控制器),但验证仅在每个资源级别上有意义。

任何人都有最佳做法的想法吗?

2 个答案:

答案 0 :(得分:0)

您可以在rails中设置自定义验证或条件验证。

请参阅以下链接

http://www.justinweiss.com/articles/a-lightweight-way-to-handle-different-validation-situations/

希望它对你有所帮助。

答案 1 :(得分:0)

说实话,没有。您最好的解决方案是将导出变体的责任分配到执行模型所需行为的特定类。例如Psuedo代码,只是猜测这里的实现 - 可能需要修改:

export = CompetitionExports.new(params[:id])
export.all 

所以在这里,我有两个资源可以检查Export模型的特定行为,而不会实际干扰模型本身。这样可以将业务逻辑保持在模型级别本身,而不会将其与所有内容混合在一起。

在控制器中,您可以只是实例化当时所需的类。因此对于所有比赛用户:

export = UserExports.new(params[:id])
export.all_at(params[:date])

或特定日期的用户

final int msec = MediaPlayer.create(this, Uri.fromFile(new File(path))).getDuration();

 final ProgressDialog dialog = new ProgressDialog(this);
        dialog.setMax(msec);
        dialog.setMessage("Progress");
        dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        dialog.setProgress(0);

在处理结果之前,两者都将运行其特定的验证。