Rails的'约定优于配置'的方式;有陷阱吗?

时间:2014-07-24 17:36:28

标签: ruby-on-rails-3

经过多年的C / C ++,PHP,一些Ruby和其他语言,一方面是不同的项目,另一方面有不同的框架,我现在想学习Rails。

在完成(入门)指南之后,我认为Rails功能强大且相当容易学习。我觉得我准备开始使用非Bookshop应用程序。

但是一位朋友警告我关于Rails的'配置约定'及其“做事”的方式。我不能看到这个'问题',但有陷阱吗?

并且:Rails与其他framworks有什么不同吗?

4 个答案:

答案 0 :(得分:1)

你要么得到零回复,要么得到一堆意见。我建议用谷歌搜索" rails是自以为是的#34;。希望这会更多地展示您可能遇到的问题。

这是一个问题吗?不,不是真的。这可能是个问题吗?是的,绝对。

有时与PITA集成可能是PITA。或者,如果你有一些疯狂的愿望,将所有主键命名为" id"这可能是一个问题。

真的不是一个问题,但你正在与许多惯例作斗争。

真的,除了遗留数据库之外,我无法想到任何关于它的常规的事情。

答案 1 :(得分:1)

你朋友说的只是某种方式。 Rails的命名约定非常强大,可以让你的大脑免于其他事情。

但是:如果你认为你有经验......你正在学习Rails - >你回到了学校。

Rail的“命名惯例”不仅仅是惯例。他们以某种方式 Rails。因此,如果你违反惯例,你就会离开公路,很快就会在没有的地方。我认为Rails的这一部分可以在指南中更好地指出。

让我举一个例子:(你厌倦了“书籍”,并开始在“酒吧”附近开了一个小应用程序)

你支撑你的小狗(打算打字错误)

然后你放入一些逻辑,做一些工作,然后你意识到你的(oops)错字。现在出现了乌云。既然你有经验,你就开始纠正错字...... PupsController - > PubsController,PubsController的文件名(你已经在路上了)......

你最终会在数据库表'pups'...(不知道中间)

这是因为您认为自己很有经验。一个初学者已经建立了一个新的脚手架(没有拼写错误)或在这里询问如何纠正'正确')

另一个例子是将thigs命名为“更好”。经过多年和许多项目你可能是一个,从来没有使用“未指定”的名称,如“用户”,“角色”,“客人”,“所有者”等等。所以你开始命名他们(nicley?):PubUser,PubOwner,... Noboddy告诉你“不要”。

你把所有名字都放在一个命名空间里(这里有很多人说“不要”),名字叫'PubApp'

虽然您的文件组织得很好,但您将以表名:pub_app_pub_owners等结束,而不是考虑它们之间的assotiative表的名称。

稍后您将输入类似

的内容
link_to 'add' new_pub_app_pub_pub_guest_url   
link_to 'add' new_pub_app_pub_owner_pub_url   

这可能不是你的意图是让事情“干净”。如果你看一下'beginers'链接......

link_to 'add' new_pub_guest_url

我所做的想要的是优先选择其中一个。

我想指出一点 - 因为你没有Rails经验 - 你不知道你在做什么(越野)正在引导你。只有艰难的回归方式。

多数民众赞成是一个陷阱。

但下次你会知道并做出妥协:'Pubowner'和'Guest'(和'pa'作为命名空间(如果你真的想要的话)

所以

link_to 'add' new_pa_pubowner_guest_url 

不是那么糟糕。但是之前想到的事情很难扭转......

答案 2 :(得分:1)

使用任何框架编写应用程序时,可能需要编写大量配置代码。但是,如果我们遵循Rails标准约定,那么可以避免过多的配置,在某些情况下可以完全没有配置。因此,只有在您不能遵循标准约定的情况下才需要显式配置。 以下是rails提供的约定:

命名约定: Active Record使用一些命名约定来了解如何创建模型和数据库表之间的映射。 Rails会复制您的类名以查找相应的数据库表。因此,对于类Book,您应该有一个名为books的数据库表。     例: 数据库表 - 多个下划线分隔单词(例如book_clubs)。 模型类 - 单数,每个单词的首字母大写(例如,BookClub)。

架构约定: Active Record使用数据库表中列的命名约定,具体取决于这些列的用途。 外键 - 这些字段应按照模式singularized_table_name_id命名(例如,item_id,order_id)。这些是Active Record在您的模型之间创建关联时要查找的字段。 主键 - 默认情况下,Active Record将使用名为id的整数列作为表的主键。使用迁移创建表时,将自动创建此列。

答案 3 :(得分:0)

我之前从未有过这样的观点,这让我产生了一两个神经:Rails正在缓存很多 - 即使在开发环境中也是如此。 (为了上帝的缘故,它确实!)

让我构建一个场景(不;不是构造,在更复杂的变体中发生在我身上)

经过足够的工作时间,你完成了当天计划的所有工作,然后通过一点清理来结束。检查永远仍在工作 - 微笑 - 然后关闭

睡眠

回到计算机,你开始全力以赴,得到'常数xy不是......',但是,为什么,一夜之间呢?

答案很简单(如果有人告诉你至少一次):Rail的缓存没有(或更好的)不能检查类/文件/方法是否被删除,而不是改变(有时候) ...)

所以(一对多)删除的文件删除了Class,它包含来自世界,但不是来自Rail的缓存。剩下的就是掉电了。

如果我还在地球上,我看到窗外的时候,我有更多的空洞情绪,我用rails server restart解决了......

我试图指出的是,没有任何魔力,但要注意,如果你认为你足够聪明,可以触及框架代码(为什么以及如何做到这一点)。在初学者级别,大缓存可以让你回到原点。