使用ActiveScaffold增强Ruby on Rails的功能 - 编程入门网
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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |