看agile web development with rails遇到困难,请帮助

看agile web development with rails遇到困难,请帮助

我在看agile web development with php?name=rails" onclick="tagshow(event)" class="t_tag">rails(中文第一版)一书,在看到58脚手架时,看不懂下面这些代码

注:我的数据库表是messages
ruby script/generate message product
==
我看app/view/ 下面list.rhtml代码
 <% for column in Message.content_columns %>
这个.content_columns 是什么来的呢?数据库语言的?-
 
<th><%= column.human_name %></th>
这个 human_name 又是什么呢

<% for message in @messages %>
为什么是messages而不是message呢? 现在是遍历数据库表messages, 不是遍历模块message么?

==
app/controller 下的product.rb
def show
  @message = Message.find(params[:id])
 end
这个(params[:id]是什么意思?

def create
  @message = Message.new(params[:message])
  这个params[:message]又是什么意思?
  if @message.save
  flash[:notice] = 'Message was successfully created.'
  redirect_to :action => 'list'
  else
  render :action => 'new'
  end
 end

1. 这个.content_columns 是什么来的呢?数据库语言的?
因为Message这个类是继承于ActiveRecord::Base的,所以它自然而然的拥有了content_columns这个属性。
这个属性包含了对应的数据表中的所表列,是一个数组对象。

2. 这个 human_name 又是什么呢
在content_columns里的每一个项都是一个代表数据库表中相应的列对象。这个对象拥有一个叫做human_name的属性,代表本列的名称。

3. 为什么是messages而不是message呢? 现在是遍历数据库表messages, 不是遍历模块message么?
@messages是一个类级别的变量,这个变量是在MessageController中的list的action中产生的。包括了所有Messages.

4. 这个(params[:id]是什么意思?
params是ActionView中的一个方法,代表地址栏中传回来的ID。例如:http://yourhost.com/railsApp/show/1 中的“1”。

5. 这个params[:message]又是什么意思?
params的意思同上,是从客户端的浏览器里回传的参数列表,为Hash类型。不同于以上的是:Message这个符号代表的是一个Hash。因为在_form.rhtml里我们都是使用<%= text_field "Message", "name" %>这种方式来生成HTML的。所以Message上传回来的值对应于一个散列。


不知道有没有什么没有说清楚的地方,欢迎指教。
为什么是messages而不是message呢? 现在是遍历数据库表messages, 不是遍历模块message么?
=
@message_pages, @messages = paginate :messages, :per_page => 10
分页,把每页的10个对象存放到messages中。
引用:
原帖由 cclong 于 2007-7-19 18:01 发表
为什么是messages而不是message呢? 现在是遍历数据库表messages, 不是遍历模块message么?
=
@message_pages, @messages = paginate :messages, :per_page => 10
分页,把每页的10个对象存放到messages中。
@message = Message.find(params[:id])
find函数返回的是当前主键所在的记录?
对的。
引用:
Find by id: This can either be a specific id (1), a list of ids (1, 5, 6), or an array of ids ([5, 6, 10]). If no record can be found for all of the listed ids, then RecordNotFound will be raised.
Find first: This will return the first record matched by the options used. These options can either be specific conditions or merely an order. If no record can matched, nil is returned.
Find all: This will return all the records matched by the options used. If no records are found, an empty array is returned.
Find by ID是这样的,它具有两面性。
如果你传入一个主键,则返回一条,如果传入一个主键的数组则返回多条纪录的数组。

当传入一个主键但是却没有找到纪录的时候,会引发RecordNotFound的错误。
当传入多个主键的时候,只要其中一条没有找到,也会引发RecordNotFound的错误。
@message = Message.find(params[:id])
==
因为要传回多个值,所以一定要Message.find(params[:id])
而不能Message.find(:id)
是么?
:id 这个符号看你定义了没有。如果没有,一般就会等价于 "id" 这个字符串。这样是find不到东西的。

params是ActionView里的一个方法,代表Request.Parameters,所以params[:id]就是代表URL中的id=1中的1或者表单里一个叫做ID的字段的值。