Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.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_Model View Controller - Fatal编程技术网

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

Ruby on rails 如何验证模型中控制器的数据?,ruby-on-rails,ruby,model-view-controller,Ruby On Rails,Ruby,Model View Controller,我的控制器中有从另一个rails应用程序和数据库接收的数据(这必须在控制器中)),我想获取这些数据,以便在允许向导中的另一个步骤之前在模型中对其进行验证(有关一些代码示例,请参阅) 我的问题是,我无法直接从模型中的控制器获取此数据,因为这违反了MVC 我的问题是如何检查模型中的控制器数据 我是否必须在视图中加载此数据/真-假响应,然后将其链接到我的模型?(我真的不想在视图中显示这一点,而且还没有完全弄清楚如何做到这一点) 我是否需要将此数据传递到路由,即example/data.json,然后

我的控制器中有从另一个rails应用程序和数据库接收的数据(这必须在控制器中)),我想获取这些数据,以便在允许向导中的另一个步骤之前在模型中对其进行验证(有关一些代码示例,请参阅)

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

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

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

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


任何正确方向的帮助/指导都将非常有用。(我也不能使用gem来执行此操作

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

其次,您不应该在模型中使用控制器方法。若控制器包含一些业务逻辑,那个么将该逻辑提取到第三个类中,控制器和模型都将使用该类

此外,您在控制器中有一个数据,您可以访问模型,对吗?。因此,如果您在控制器方法中,例如在before筛选器或操作中,则可以获取该数据并将其传递给模型,如下所示:

def controller method
  hey_model.is_this_correct?(data)
end
如果您说必须在控制器响应请求后(例如,在下一个向导步骤,即在下一个请求时)检查该数据,那么您肯定必须在请求之间的某个位置存储该值


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

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

有了这条线,一切都解决了

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

var
是一个变量,以防您需要在控制器中处理该数据,
target\u model
是您要发送数据的模型,
function\u\u your\u model
是您要处理模型中已有数据的函数,在这个函数中,您可以发送所需的数据。

请求中的信息是否转化为对象的“状态”?如果是这样,您可以设置对象的状态,然后使用该状态在模型中进行验证。通常,控制器中与请求、时间、会话、参数等相关的内容应该留在那里。与模型相关的东西应该放在模型上。你能更新对象并在模型上设置有效的状态信息吗?数据进来了,然后我基本上想检查数据是否存在,我可以让控制器在其方法中返回true/false,但它必须存在于控制器中。然后我想从控制器那里得到这个响应,并用它来验证我的模型。您对如何执行此操作有何想法?数据来自另一个rails应用程序数据库(从控制器发出请求)。此控制器必须包含此数据请求方法,它不能转到其他任何地方。模型验证应该是这样的
validate:data_presence,if=>lambda{| 0 | 0.current_step==“step1”}
def data_presence#检查控制器数据是否存在或正确/错误响应等结束
数据来自数据库,我想避免再次存储此数据,但如果我需要将其放置在step1视图或可接受的路线上,您能提出任何建议吗?建议#1。更改向导的逻辑(不是一项简单的任务)。建议2。将当前步骤暂时保存在模型的表中(闻起来)建议#3。将该数据保存在Cookie/session中,或将其传递到下一步表单,并使其将该数据插入下一个请求中。顺便说一下,
|0 | 0.当前步骤
Woops抱歉本应是
o
not
0
请看一看,看看我能做些什么谢谢你的帮助。这是我真正想要的答案尽管我有其他人在回答其他问题,但还是有一些很好的方法来实现这一点谢谢你的帮助。