如何验证模型中控制器的数据?

时间:2013-01-15 00:27:55

标签: ruby-on-rails ruby model-view-controller

我的控制器中有来自另一个rails应用程序和数据库的数据(这必须在控制器中)我想获取这些数据,所以我可以在我的模型中验证它允许向导中的另一个步骤(有关代码示例,请参阅my other question

我的问题是我无法直接从我的模型中的控制器获取此数据,因为这违反了MVC。

我的问题是如何检查模型中的控制器数据?

  • 我是否必须在视图中加载此数据/ true - false响应,然后将其链接到我的模型? (我真的不希望这个在视图中显示,并且还没有完全弄清楚如何做到这一点)

  • 我是否需要将此数据传递到路由,即example/data.json,然后在我的模型中进行检查? (我还没有弄清楚如何在我的模型中使用这个data.json)

任何正确方向的帮助/指导都非常有用。 (我也不能使用宝石来做到这一点

2 个答案:

答案 0 :(得分:1)

首先,请确保您不会通过其自身不包含的数据验证模型。模型应验证其当前状态,但是一种进入此状态的方式(例如,哪个用户将模型置于此状态)。

第二,你不应该在模型中使用控制器方法。如果控制器包含一些业务逻辑,则将该逻辑提取到控制器和模型将使用的第三个类中。

此外,您在控制器中有数据,并且您可以访问模型,对吧?因此,如果您使用的是控制器方法,例如在之前的过滤器或操作中,您可以获取该数据并将其传递给模型,如下所示:

def controller method
  hey_model.is_this_correct?(data)
end

如果您说控制器响应请求后(例如,在下一个向导步骤,即下次请求时)必须检查该数据,那么您肯定必须存储该值请求之间的某处。

这是无状态HTTP的重点。在明确执行此操作之前,请求之间不会保存任何数据。您可以将您的价值存储在cookie或数据库中。

答案 1 :(得分:0)

我知道这个问题是前一阵子的,但是对于那些仍在搜索的人,我找到了确切的答案,即如何将信息从控制器传递给模型。

有了这行,一切都解决了

var = request.env['target_model'].sudo().function_in_your_model(data) 

var是一个变量,以备您需要在控制器中处理该数据时使用,target_model是您要在其中发送数据的模型,function_in_your_model是您要使用的函数将处理模型中已有的数据,并在此函数内发送所需的数据。