Rails的良好实践

时间:2011-01-24 23:58:09

标签: ruby-on-rails

我正在寻找人们使用Rails时良好*实践的例子。

我有一对如:

  • before_filter调用在控制器类名称声明下面,而不是其他地方。
  • 命名空间的基本控制器名为BaseController,而不是ApplicationController。永远只有一个ApplicationController
  • attr_*方法定义在各自类的顶部。
  • 模型回调在attr_*方法之后,或在模型的顶部。
  • 验证位于模型的顶部,自定义验证方法在文件底部定义为private方法。

现在我不是在寻找Ruby的良好实践,而是更多的Rails专用列表。上面列出的只是一个例子,而不是福音。

*我不想使用“最佳实践”这个术语,因为最好的意思是最终实践,在所有代码中,人们可能不同意。

2 个答案:

答案 0 :(得分:3)

我发现一种非常一致的做法是括号是合适的。像验证和关联这样的DSL类宏看起来很自然,没有它们,而带有显式接收器和参数的方法看起来更好。

has_many :users

User.find_all_by_field(my_var)

VS

has_many(:users)

User.find_all_by_field my_var

答案 1 :(得分:3)

  1. 我在attr_accessible*声明后加has_* 我确实记得如果我没有按上述顺序声明错误。 (明天我将重新创建这个问题并重新确认)

    试了一下:

    使用:

    has_one :something
    accepts_nested_attributes_for :something
    

    但这引发了错误:
       No association found for name 'something'. Has it been defined yet?

    accepts_nested_attributes_for :something
    has_one :something
    

    我认为,我收到此错误的原因是因为我在something来电之前scope使用了has_one

  2. 如果您在(例如,索引)视图中执行@posts.something并获得nil错误,但您知道索引操作中的@posts = Post.find正在工作,加倍确定你在控制器类代码中的某个地方(很可能是较低的地方)没有另一个(很可能是空的)def index