`

write_attribute应用一例

阅读更多
    项目里有这样的两个需求:

    1. 表单要显示和提交一个参数,这个参数单位是MHZ,但是程序里精度要求比较高是用HZ,也就是保存的时候要乘10e5,表单显示的时候,和输入的时候,都不要那6个零。

    2. 支持单位换算。比如,一个项目里有个资费选项,会根据汇率情况显示美元或者RMB。显然,汇率是变化的,表单提交时,有可能是输入美元,有可能输入RMB,这个看用户设置。

   所以我们的用法是如下:

   model里添加方法:


  def noise_floor_high_disp=(x)
     #原来数据表字段为nf_high
     write_attribute(:nf_high,(x.to_f*1_000_000).to_i)
  end

  def noise_floor_high_disp()
    if nf_high.nil?
      return nil
    else
      return read_attribute(:nf_high)/1000000.0
    end
  end


在表单里修改方法如下:


   
<td><%= text_field 'analyzer', :noise_floor_high_disp,  %></td>


     看起来没什么,可以这样做的好处在于,不用在controller和viewer里太多修改。
     如不汇率换算那个,我之前就会如下处理:

viewer:

 #根据参数设置取得用户设置,例如得到是美元还是RMB
  <%unit_diff=ConfigParam.find(67).val.to_i==1 ? @us : @rmb

  att = @analyzer.attenuator.nil? ? nil : @analyzer.attenuator+unit_diff

  %> #确定相对差值
  <tr>
    <td><label for="attenuation">Attenuation(<%=unit_diff==0 ? "RMB" : "$"%>)</label></td>
    <td><%= text_field 'analyzer','attenuator',{:size=>3,:value=>att}  %></td>
  </tr>



Cotroller里要分别针对,创建和修改做两次处理

  def analyzer_create
    if params[:analyzer][:site_id].to_i == 0
    #else
    #  raise params[:analyzer].inspect()
    end
    
    @analyzer = Analyzer.new(params[:analyzer])
	@site= Site.new(params[:site])
    @analyzer.status = 10
    if @analyzer.save
	  unit_diff=ConfigParam.find(67).val.to_i==1 ? -60 : 0
	  @analyzer.update_attributes(:attenuator=>"#{params[:analyzer][:attenuator].to_i+unit_diff}") unless params[:analyzer][:attenuator].nil? or params[:analyzer][:attenuator].blank?
	  	  @analyzer.update_attributes(:nf_low=>"#{params[:analyzer][:nf_low].to_i+unit_diff}") unless params[:analyzer][:nf_low].nil? or params[:analyzer][:nf_low].blank?	  
		  @analyzer.update_attributes(:nf_high=>"#{params[:analyzer][:nf_high].to_i+unit_diff}") unless params[:analyzer][:nf_high].nil? or params[:analyzer][:nf_high].blank?


  def analyzer_update
    @analyzer = Analyzer.find(params[:id])
	@site=@analyzer.site
    if @analyzer.site_id.to_i == 0
      logger.debug("handling site");
      site_id = Site.create_if_needed(params[:site][:name])
      params[:analyzer][:site_id]=site_id
    end
	#make sure when user stop auto_connect. we can handle
    if @analyzer.auto_mode !=3 and @analyzer.att_count < 9
	  @analyzer.update_attribute(:att_count,-1)
	end
    if @analyzer.update_attributes(params[:analyzer])
	  unit_diff=ConfigParam.find(67).val.to_i==1 ? -60 : 0
	  @analyzer.update_attributes(:attenuator=>"#{params[:analyzer][:attenuator].to_i+unit_diff}") unless params[:analyzer][:attenuator].nil? || params[:analyzer][:attenuator].blank?
0
0
分享到:
评论
1 楼 机器人 2009-08-06  

] 

哈哈

相关推荐

Global site tag (gtag.js) - Google Analytics