笔记1

今天做CRM系统中的用户的添加、显示模块;
一、添加模块
在做添加用户模块时,用了简便的方法——在模型中用检验,validates_presence_of,validates_conformation_of,等来检验模型的属性;当错误生成时,用系统自动生成的样式——scoffold.css进行错误提示;
以前自己写程序时,要么用自己编写的代码进行防错处理;用rails的检验方法时经常发生有错误但没提示的情况;这次弄时又差点没显示出来;以下将其中几个关键的地方总结一下:
1、在添加前,先初始化一个对象,例如:要添加一个用户,可以先初始化一个用户对象:
@user = User.new()
2、添加用户的页面形成后,在保存用户的action中也需要新建一个对象,
  @user = User.new
  然后需要分两种情况,代码为:
   if @user.save
      flash[:notice] = '创建用户成功!'
      redirect_to :controller=>'admin',:action=>'index'
    else
      render :action=>'index'
    end
3、在视图中需要添加一段代码显示错误信息:
   <%=error_messages_for("user")%>
这次没显示错误提示的原因就是在第2步中没有分情况,即在@user.save失败时,没有用render :action=>'index';下次需要注意。

二、列出用户
在列出用户模块中有搜索用户的功能,搜索项,用户可以填,也可以不填,以前用比较笨的方法:
 
  sql = "1=1"
  sql += " and user_name = :user_name" unless params[:user_name].blank?
  sql += " and first_name = :first_name" unless params[:first_name].blank?
  sql += " and last_name = :last_name" unless params[:last_name].blank?
  .............
 
以上方法可以实现搜索的功能,但过程复制,代码也多;如果可填项少还好,万一有十几个可填项,那代码就太长了;

改进后的方法:

    fields = %w{user_name first_name last_name status department province city is_admin}
    sql  = "1=1"
    fields.each do |field|
      if params[field.to_sym].class == Array and !params[field.to_sym].include?("")
        sql += " and #{field} in (:#{field})"
      elsif params[field.to_sym].class != Array and !params[field.to_sym].blank?
        sql += " and #{field} = :#{field}"
      end
    end
   
    @users = User.find(:all,:conditions=>[sql,params])
   
先把所有的属性组成一个数组,然后依次检验,如果为所得属性为数组,则sql中用in检验;
   

你可能感兴趣的:(sql,css,Flash,Rails)