2013-01-15 27 views
0

我有我的控制器中的数据从另一个rails应用程序和数据库接收(这必须在控制器)我想获取这些数据,以便我可以在我的模型中验证它,然后再允许向导中的另一个步骤(请参阅my other question的一些代码示例)如何验证模型中控制器的数据?

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

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

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

  • 我需要这个数据传递给路线即example/data.json,然后检查这在我的模型? (我还没有制定出如何在我的模型中使用此data.json从那里)

在正确的方向任何帮助/转向将是非常有用的。双重肯定,你不验证由它本身并不包含数据模型(我也不能使用宝石来做到这一点

+0

来自请求的信息是否转化为对象的“状态”?如果是这样,您可以在对象上设置状态,然后使用它在模型中进行验证。通常情况下,控制器中有关请求,时间,会话,参数等的内容应该停留在那里。与模型相关的东西应该放在模型上。你能更新对象并在模型上设置有效的状态信息吗? – Swards

+0

数据进来然后我基本上想检查数据是否存在我可以让控制器在其方法中返回true/false,但它必须存在于控制器中。然后我想从控制器得到这个响应,并用它来验证我的模型。你有什么想法如何做到这一点? –

回答

1

首先,请加倍。模型应该验证它的当前状态,但是而不是是它来到这个状态的一种方式(例如,哪个用户把模型放到这个状态)。

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

此外,你有一个控制器中的数据,你有权访问模型,对不对?如果说,这些数据必须被检查

def controller method 
    hey_model.is_this_correct?(data) 
end 

:因此,如果你在一个控制器的方法,例如在之前过滤器或行动,你可以采取数据并将其传递到模型中,像这样的控制器已经回应了一个请求(例如,在下一个向导步骤,即下一个请求),那么您肯定必须在请求之间存储该值。

这是无状态HTTP的要点。直到您明确地执行此操作,才会在请求之间保存数据。您可以将您的价值存储在Cookie或数据库中。

+0

数据来自另一个Rails应用程序数据库(从控制器发出请求)此控制器必须包含此数据请求方法,它不能到达其他任何地方。模型验证会是这样的'validate:data_presence,if => lambda {| 0 | 0.current_step ==“step1”}''def data_presence #check控制器数据存在或真/假响应等结束数据来自数据库,我想摆脱这再次存储,但如果我需要放置它在step1视图或某条可以接受的路线上的某个地方,您可以提出任何建议吗? –

+1

建议#1。改变向导的逻辑(不是一件容易的事)。 建议#2。将当前步骤暂时保存在模型表中(它闻起来) 建议#3。将这些数据保存在cookies/session中,或者将它传递给下一步的表单,并将其插入下一个请求中。 –

+0

顺便说一句,'| 0 | 0.current_step' < - 这是行不通的,你不能用整数 –

相关问题