`

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  

] 

哈哈

相关推荐

    Windows_的API函数.doc 描述介绍 windows api的

    《Windows API函数详解——以文件及剪贴板操作为例》 Windows API函数是开发者进行Windows平台应用程序开发的核心工具,它们提供了丰富的功能,包括文件操作、界面交互、系统管理等。本章将重点介绍Windows API中...

    隐藏、显示驱动器的软件源码

    本篇将详细讲解如何通过编程实现这一功能,主要以VB(Visual Basic)语言为例,因为这是在描述中提及的编程环境。 隐藏驱动器的操作通常涉及到操作系统级别的接口调用,VB提供了丰富的API函数来实现这些功能。API...

    Windows2000 磁盘I/O API 函数应用举例

    FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); ``` 以上介绍了一些基本的磁盘管理相关的API函数及其应用场景。这些API函数在Windows2000系统中被广泛应用于磁盘...

    vc文件操作汇总—支持wince

    这里同样使用`GetFileAttributes`函数,但这次是检查返回的属性是否包含`FILE_ATTRIBUTE_DIRECTORY`,这表明这是一个目录。 ##### 1.3 判断文件或文件夹是否存在 ```cpp // 判断文件或文件夹是否存在 BOOL ...

    基于Xenomai的嵌入式软PLC运行系统研究与实现.pdf

    应用层接口函数的实现涉及到了内核对象(kobject)和属性(attribute)的定义。通过定义一个struct bin_attribute结构体,为HMC5883L设备创建了属性文件节点。这样,用户空间可以通过echo命令和cat命令对这些属性...

    xml读写操作类

    doc.save_file("modified_example.xml", " ", pugi::format_default | pugi::format_write_bom); ``` 在`XmlFile.cpp`和`XmlFile.h`文件中,通常会定义一个`XmlFile`类,封装这些操作。类中可以包含如`load()`、`...

    c语言程序设计文件操作方法示例(CreateFile和fopen)

    实例:(1)第一种方法CreateFile 代码如下:#include “stdafx.h”#include &lt;windows&gt;void main...“C://S.txt”, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL&#41;; 

    STM32F4寄存器模板创建例程.rar-综合文档

    STM32F4系列是意法半导体(STMicroelectronics)推出的高性能ARM Cortex-M4内核微控制器,广泛应用于各种嵌入式系统设计。在开发基于STM32F4的项目时,理解并熟练操作寄存器是至关重要的。这个"STM32F4寄存器模板...

    C++ XML读写类

    在IT领域,XML(eXtensible Markup Language)是一种用于存储和传输数据的标准化格式,尤其在软件开发中,XML因其结构化和可扩展性而被广泛应用。C++作为一门强大的编程语言,提供了多种库来处理XML文档,使得开发者...

    python爬取dangdang指定图书数据

    通常,我们会选择Chrome或Firefox作为驱动程序,这里以Chrome为例。安装相应的webdriver后,可以通过以下代码启动浏览器: ```python from selenium import webdriver driver = webdriver.Chrome() driver.get('...

    vc 串口通讯 数据库存取

    2. **打开串口**:使用`CreateFile`函数创建一个串口句柄,如`HANDLE hCom = CreateFile("COM1:", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);` 3. **配置串口**:使用`...

    精彩编程与编程技巧-如何使用vb取得一个文件的控制权...

    例如,在本例中使用`OF_SHARE_DENY_READ`表示不允许其他进程读取此文件。 - **返回值**:如果函数成功,则返回文件句柄;如果失败,则返回-1。 ##### 2. `CloseHandle`函数 用于关闭之前通过`OpenFile`函数打开的...

    修改文件属性,包括文件创建时间、文件修改时间

    HANDLE hFile = CreateFile(fileName, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { std::cout !" ; return; } if (!SetFileTime(hFile, ...

    vb.dll文件程序

    vb.dll 文件可能包含了一些特定的功能或服务,如本例中的串口通信功能。 ### 串口通信基础知识 - **串口通信**:是一种常见的数据传输方式,通过一条信号线逐位发送数据。它被广泛应用于计算机与外部设备之间的...

    Python 编程练习题 100 例(源码),实例在 Python 3.6 环境下测试通过。.zip

    【Python编程练习题100例】是一份针对Python初学者和进阶者精心设计的实战练习资源,涵盖了Python语言的基础语法、数据结构、函数、模块、类与对象、异常处理、文件操作等多个方面。这份资源在Python 3.6环境下经过...

    用VC++写上位机软件实现单片机串口通讯

    m_hIDComDev = CreateFile(COM2, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL); if (m_hIDComDev == NULL) { AfxMessageBox("Cannot open ...

    用MFC画直线椭圆矩型可选择线条颜色和填充颜色,也可保存

    HANDLE hFile = CreateFile(filename, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile != INVALID_HANDLE_VALUE) { BITMAPFILEHEADER fileHeader; memset(&fileHeader, 0, ...

    test_hdf5.zip

    在这个例子中,我们首先创建了一个HDF5文件,然后定义了数据类型(本例中为double),接着创建了一个数据集,指定其维度为10x10。我们写入数据到数据集中,然后读取出来。需要注意的是,数据的内存布局必须与数据集...

    JavaScript_2_DOM和BOM1

    document.getElementById(id).attribute=新属性值 ``` 本例改变了元素的 src 属性: ``` var x = document.getElementById("image"); x.src = "2.gif"; ``` 3.4 CSS 变化 改变 HTML 元素的样式: ``` document....

    用VC++6.0编写串行通信程序

    随着32位Windows操作系统的普及,越来越多的智能控制系统应用软件开始转向Windows平台,而串行通信作为数据交换的一种常见方式,在这些应用中占有重要地位。本文将以Windows 98 SE 32位平台和VC++6.0为例,详细介绍...

Global site tag (gtag.js) - Google Analytics