Rails应用开发体验(2)

书接上回 Rails应用开发体验(1)

这次开始记录一些具体开发的技术问题了...

业务信息的基本CRUD不再废话了,通过静态scaffold产生的页面具备全部功能,根据自己需要调整整合即可;

文件上传
应用中需要用到图片上传功能,文件上传是应用开发中遇到的第一个“棘手”问题,手头的Rails开发书籍和网上找到的资料都有对Rails处理图片上传的处理代码,但好像都是点到为止,说的不是很全面,自己磕磕绊绊总算开发通过了,将一些细节记录下来为其他开发者提供个参考;
首先文件上传使用的表单控件为 form.file_field。我这里处理文件上传主要是图片,不打算将图片直接保存在数据库字段中,而是将图片根据规则重命名后保存在指定图片文件夹中,数据库字段记录图片文件名。
关于图片直接随Model属性保存到数据库字段中的方法我就不详细说了,书上和网上介绍这种方式的示例很多,主要说一下Server端如何对上传文件进行再处理。
使用这个控件后前台页面直接就会展现文件上传控件,关键是服务端如何接收上传的文件,开发时一定要注意:
form.file_field中指定的object_name即为Model中处理文件上传方法的function_name, object_name 和 function_name 必须保持一致(注意下面2段示例代码中的img);
View示例
<tr>
  <td>会员头像:</td>
  <td><%= f.file_field :img %></td>
</tr>

Model示例
class Item < ActiveRecord::Base
  
  # 处理上传文件
  def img=(file)    
    file_name = file.original_filename    
    file_data = file.read
    
    # 将文件重命名后保存到指定文件夹
    file_name = Time.now.strftime("%y%m%d%H%M%S") + "." + file_name.split(".")[-1]
    # 这里的self.img_url是Model的真实属性,数据库中将保存此img_url
    self.img_url= file_name
    
    File.open(RAILS_ROOT + "/public/images/template/" + file_name, "wb") { |f| f.write(file_data) }
  end
end


时间格式化
时间格式化在显示时经常要用到,比较容易。使用 strftime方法,具体的格式化关键字自己去查API吧;
# 将当前日志格式化为 09-12-28 14:33
time_str = Time.now.strftime("%y%m%d %H:%M")


Model中还有哪些属性
这段可能是废话,但起码我第一次开发时不太了解,也记录下来吧。除了我们generate scaffold时显示声明的Model中的属性,每个Model对象还有3个自动产生的属性;
1. id
2. created_at
3. updated_at
字段含义很明显,根据需要时选择调用吧;

日期控件date_select
Rails中自带的日期控件 form.date_select非常方便,直接显示年月日可选列表;但默认生成出来的可选日期范围是当前时间前后各5年,我这里需要用日期控件表示会员生日,前5年一定不够用啊。查找API,里面有明确可设参数说明,对我有用的:
1. 年份开始时间、结束时间可定,通过 :start_year, :end_year 指定
2. 月份时间不要英文的,直接显示数字,通过 :use_month_numbers 指定
3. 默认年份为xxxx,通过 :default 指定
示例代码
<%= f.date_select :birthday, :default => {:year => 1980, :month => 1, :day => 1}, :use_month_numbers => true, :start_year => 1960, :end_year => 2000 %>


今天先记录到这里吧,To Be Continue...

你可能感兴趣的:(F#,Blog,Ruby,ActiveRecord,Rails)