作为 Rails 的新手,我很难找到提供 Ruby on Rails 概要的网站或引用资料。我基本了解 MVC、ActiveRecord 和类似的东西,但我很难理解其中的一些关系和基础知识。例如:
:content_for
或 render
部分)?我不应该使用哪些方法? lib
文件夹是干什么用的? 关于这个问题,我已经阅读了 StackOverflow 上的一些回复,但所有回复都只是指向我需要阅读的 300 多页的书,而我只想简要总结一下重要的内容。
我已经知道一些资源,但没有为新用户提供基本概念的简明摘要:
感谢您提供的任何帮助、引用或指导!
P.S. I would like this wiki to become a living document, so please add to it, edit it, etc. as you feel necessary.
最佳答案
1. 我需要注意哪些命名约定?
db table 是复数,model 是单数,controller 是复数。所以你有User
由 users
支持的模型表,并通过 UsersController
可见.
文件应命名为类名的wide_cased 版本。所以FooBar
类需要在一个名为 foo_bar.rb
的文件中.如果您使用模块进行命名空间,则命名空间需要由文件夹表示。所以如果我们在谈论 Foo::Bar
类,应该在foo/bar.rb
.
2. Controller Action 应该如何组织和命名?
Controller Action 应该是 RESTful。这意味着您应该将 Controller 视为公开资源,而不仅仅是启用 RPC。 Rails 有一个成员操作与资源收集操作的概念。成员操作是对特定实例进行操作的操作,例如 /users/1/edit
将是用户的编辑成员操作。收集操作是对所有资源进行操作的操作。所以/users/search?name=foo
将是一个收集 Action 。
上面的教程描述了如何在你的路由文件中实际实现这些想法。
3. 在 View 中呈现信息的最佳方式是什么(通过:content_for
或呈现部分),哪些方式是我不应该使用的? content_for
当您希望能够将 html 从内部模板附加到外部模板时应该使用它——例如,能够将 View 模板中的某些内容附加到布局模板中。一个很好的例子是添加特定于页面的 javascript。
# app/views/layout/application.rb
<html>
<head>
<%= yield :head %>
...
# app/views/foobars/index.html.erb
<% content_for :head do %>
<script type='text/javascript'>
alert('zomg content_for!');
</script>
<% end %>
partials 要么用于分解大文件,要么用于多次呈现相同的信息位。例如
<table>
<%= render :partial => 'foo_row', :collection => @foobars %>
</table>
# _foo_row.html.erb
<tr>
<td>
<%= foobar.name %>
</td>
</tr>
4.什么应该进入助手,什么不应该?
您的模板中应该只有基本的分支逻辑。如果你需要做更激烈的事情,它应该是一个助手。 View 中的局部变量是对世界上所有好的和正确的事物的厌恶,所以这是一个很好的迹象,表明你应该做一个 helper 。
另一个原因只是纯代码重用。如果你一遍又一遍地做同样的事情,只有轻微的变化,把它拉到一个助手中(如果它是完全相同的事情,它应该是部分的)。
5. 什么是常见的陷阱或我需要从一开始就正确做的事情?
部分不应该直接引用实例(@)变量,因为它会阻止重复使用。始终通过
:locals => { :var_name => value }
传递数据渲染函数的参数。将与呈现 View 没有直接关系的逻辑排除在 View 之外。如果您可以选择在 View 中做某事,然后在其他地方做,那么 10 次中有 9 次在其他地方做是更好的选择。
我们在 Rails 中有一个口头禅,那就是“胖模型,瘦 Controller ”。一个原因是模型是面向对象的, Controller 是天生的过程。另一个是模型可以跨 Controller ,但 Controller 不能跨模型。第三是模型更具可测试性。这只是一个好主意。
6. 如何模块化代码?这就是 lib 文件夹的用途吗?
lib 文件夹用于存放跨越模型关注点的代码(即不是模型,但将被多个模型使用的东西)。当你需要在里面放东西的时候,你会知道的,因为你无法弄清楚要放什么模型。在这种情况发生之前,你可以忽略 lib。
需要记住的是,从 rails 3 开始,lib 不在自动加载路径上,这意味着您需要
require
你放在那里的任何东西(或添加回来)一种自动要求
lib
中所有模块的方法目录:#config/initializers/requires.rb
Dir[File.join(Rails.root, 'lib', '*.rb')].each do |f|
require f
end
关于ruby-on-rails - Ruby on Rails 基本概念总结,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5205002/