当前位置:  开发笔记 > 后端 > 正文

在Rails上,form_for和validate_presence_of如何协同工作?

如何解决《在Rails上,form_for和validate_presence_of如何协同工作?》经验,为你挑选了1个好方法。

当我们在模型中有validate_presence_of:name时,然后当我们放入我们重新呈现'new'的create动作时,form_for将填充字段,而error_messages_for'tory'将具有正确的错误消息.

这真的很棒,同时,这看起来像魔术......我发现很多书都没有解释魔法是如何发生的.它是由一些全局变量?

当调用form_for时...是否使用从@ story.save返回的@story,而不是来自新操作的@story = Story.new?所以如果我使用:form_for的故事,那么字段将不会填充错误?

有时我觉得我在使用Ruby on Rails时玩魔法,除了我不知道魔法是怎么发生的......有点像我让兔子出现,但我不知道我是怎么做到的.所以我真的想知道Rails的内部工作原理.



1> Raphomet..:

是的,Rails非常神奇.不幸的是,这些只是你必须要学习的东西,一旦你习惯了惯例,你就可以轻松地使用魔法做一些非常复杂的事情.

这里有三个单独的问题,它们相对简单,但是当你一次性完成时看起来非常神奇.让我们一个一个地分解它们:

验证失败时,它们不允许保存模型对象,并将错误添加到object.errors哈希.

当你运行@ story.save时,它会启动所有验证.由于@ story.name为空,因此validates_presence_of:name会向对象添加错误.

控制器中的实例变量可用于它们呈现的视图.

所以,是的,它与视图可以访问的@story相同 - 一个无效且附加了错误信息的那个.

form_for有很多形式,而你正在使用的形式非常聪明

视图中的form_for标记可能如下所示:

<%= form_for @story do |story| =>

这是form_for的一个特殊版本,它从传入的对象中推断出各种信息并适当地呈现表单.@story因为该行而填充了一些字段

@story = params[:story]

在你的控制器中,它会继续并为你填写这些字段.它也做了一些其他事情 - 例如,它检查@ story.new_record?看它是否应该使用POST HTTP方法(RESTful create)或PUT方法(RESTful更新).

总而言之,要学习很多魔法,但是一旦你做了大魔术就会更容易理解.祝好运!

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有