快速业务通道

使用ActiveScaffold增强Ruby on Rails的功能 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14
conf.list.label = ''People''   conf.list.sorting = [{:last_name => :ASC}, {:first_name => :ASC}]   conf.list.columns.exclude :password_hash  end end

这个例子就不能更新模型实例、更改列表标题和定制默认用户列表排序了。sorting 让您可 以控制如何从数据库中返回记录,并期望得到一个 {column => direction} 散列数组。还配置 ActiveScaffold 不显示用户不需要查看的特定列;在本例中,password_hash 列不需要在 UI 中显示, 因此就将其排除了。

显示 ActiveRecord 对象

to_label 方法让您可以定制模型实例在页 面中的显示方式。默认情况下,ActiveScaffold 会查找模型中的一组方法:

to_label

name

label

title

to_s

最后一个方法是由 ActiveRecord 提供 的,会显示成 “#:<Address:0xFFFFFF:>” 的形式,这对于用户来说不够友好。下面 是一个更好的方法:

清单 10. 定制模型的显示

class User < ActiveRecord::Base
 belongs_to :organization
 def to_label
  first_name << '' '' << last_name
 end
end

例如,用户的 to_label 可能是 John Doe。

使用ActiveScaffold增强Ruby on Rails的功能(7)

时间:2011-11-29 Mike Perham

定制属性显示

ActiveScaffold 允许开发人员完全控制模型属性的实际显示方式。默认情况下,ActiveScaffold 只会对一些简单的属性 值调用 to_s,从而确定它们到 HTML 的顺序。要对此进行定制,只需要在 app/helpers/<model>_helper.rb 中将一个列显示帮助方法添加到相应的帮助类中即可。

清单 11. 定制属性显示

def birthdate_column(record)
 record.birthdate.strftime("%d %B %Y")
end

在上面的帮助方法中,您拥有记录的全部访问权限。在本例中,这个帮助并不是很智能,因 为它并不能说明用户所请求的现场,确定日期格式就需要用到该现场。

对于 has_many 和 has_and_belongs_to_many 关联来说,ActiveScaffold 会通过使用上面提到的 to_label 逻辑来渲染它 们,从而显示前 3 个条目。这 3 个条目会链接在一起,这样在点击时,整个关联就可以显示出来了。这 可以防止用户界面被大型关联集所覆盖的情况。

窗体显示

ActiveScaffold 也可以基于 Rails 的 ActiveRecord 和 ActiveView 库为模型创建一个窗体。varchar 列会变成文本输入,boolean 型变量会映射成 HTML 的复选框等等。

有一点需要注意:虚拟属性(在模型中作为属性定义,但 却不真正保存在数据库中的属性)的 HTML 渲染方式可能与普通的模型属性不同。任何名字中包含 “password” 的普通模型属性在 HTML 都会渲染为一个密码输入。不过对于虚拟属性来说却 并非如此,在使用虚拟属性作为密码窗体输入时,很容易发现这一点。在这种情况下,我们将使用虚拟属 性来捕获窗体输入,并在保存时将这些值映射到 password_hash 列中,这样用户的纯文本输入就可以作 为一个 SHA256 散列安全地保存到数据库中。

清单 12. 在用户模型中创建虚拟属性

require ''digest/sha2''
class User < ActiveRecord::Base
  attr_accessor :password, :password_confirmation
  validates_presence_of :password, :password_confirmation
  def validate
   errors.add(''password'', ''and confirmation do not match'') \
      unless password_confirmation == password
  end
  def before_save
   self.password_hash = Digest::SHA256.hexdigest(password) if password
  end
end

我们添加了两个 form_column 帮助方法将它们作为密码输入正确地进行渲染。ActiveScaffold 期望 使用 field_name 参数中给定的名称对输入进行

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号