find_or_create_by_XX

已存在的数据,执行更新,如果没有存在,则插入数据。

view:
<%=g.d f.select "#{d[:cityid]}-#{d[:device_manu]}",[["",""],["TL1","tl1"],["SNMP","snmp"]], {:selected =>d[:means] }%>

model:
def self.update_collect_means(collect_means)
collect_means.each_pair do |id,means|
update_all("id='#{id}'","means = '#{means}'")
end
end

controller:
def update_collect_means
params[:collect_means].each_pair do |id,means|
unless means.blank?
keys = id.split("-")
#collect_mean = CollectMean.new(:cityid => keys[0],:device_manu => keys[1],:means => "#{means}")
collect_mean = CollectMean.find_or_create_by_cityid_and_device_manu_and_means(:cityid => keys[0], :device_manu => keys[1],:means => "#{means}")
collect_mean.save
end
end
#CollectMean.update_collect_means(params[:collect_means])
flash[:notice] = "更新采集方式成功。"
redirect_to :action => :index
end
### 关于OpenCV中TrackerCRST创建时出现E0276错误的解决方案 在处理OpenCV中的`TrackerCRST`创建问题并遇到编译器错误 `E0276` 时,通常是因为某些依赖未正确配置或版本不兼容所导致。以下是可能的原因分析以及对应的解决方法: #### 错误原因 1. **OpenCV版本冲突** 如果系统中存在多个不同版本的OpenCV库,则可能导致链接阶段出现问题[^1]。 2. **缺少必要的头文件或库文件** 创建`TrackerCRST`对象需要特定的模块支持(如`tracking`),如果这些模块未被正确加载或者其路径未指定,则可能出现此类错误[^2]。 3. **C++标准不符合要求** 部分高级功能(例如跟踪算法)可能需要更高版本的C++标准支持(比如C++11及以上)。如果没有启用相应的选,在构建过程中可能会触发类似的错误提示。 4. **IDE/Compiler设置不当** 对于像Visual Studio这样的集成开发环境来说,当目生成器无法识别目标平台所需的工具链时也会报错[^3]。 #### 解决方案 针对上述提到的各种可能性提供以下几种修复措施: ##### 方法一:清理旧版OpenCV残留影响 执行下面这条命令可以卸载已有的OpenCV实例以防止干扰后续操作: ```bash sudo apt-get remove --purge libopencv* ``` 重新安装最新稳定发行版之前记得更新软件包索引列表: ```bash sudo apt update && sudo apt upgrade -y ``` 之后按照官方文档指导完成新版本部署流程即可. ##### 方法二:确认OPENCV_LIB变量指向无误 通过运行如下脚本获取当前环境中可用的OpenCV静态/动态共享对象所在目录位置,并将其赋值给环境变量`OPENCV_LIB`以便后续调用期间能够顺利定位资源文件. ```bash export OPENCV_LIB=$(pkg-config --libs-only-L opencv4 | sed 's/-L//g') echo $OPENCV_LIB ``` 确保返回的结果是非空字符串形式表示的实际物理地址而非其他异常情况下的占位符之类的替代品. ##### 方法三:调整CMakeLists.txt内容适配需求场景 编辑源码根目录下的`CMakeLists.txt`, 添加如下几行语句显式声明追踪子系统的参与状态以及其他必要参数设定: ```cmake find_package( OpenCV REQUIRED ) include_directories(${OpenCV_INCLUDE_DIRS}) target_link_libraries(your_project_name ${OpenCV_LIBS} tracking) set(CMAKE_CXX_STANDARD 11 CACHE STRING "" FORCE) ``` 这里假设最终产物名称叫做`your_project_name`. 实际应用当中应当替换为自己实际使用的工程名. 另外值得注意的是最后那条指令强制设定了整个目的默认编程范式级别为C++11, 这样做有助于规避因语法特性差异引发的一系列潜在隐患. ##### 方法四:验证VS工作区属性定义准确性 假如采用Windows操作系统配合Microsoft Visual Studio作为主要生产力套件的话, 则有必要仔细核查一下solution explorer面板里边各个configuration manager tab页签里的具体数值是不是符合预期设计初衷的要求. 特别关注以下几个方面: - Platform Toolset -> Should be set as v14x (MSVC xx.x). - Configuration Type -> Executable (.exe), Dynamic Library(.dll) or Static library(.lib)? - Character Set -> Use Multi-byte character set unless Unicode strictly required by third party libraries involved hereafter. 一旦发现任何不符之处立即修正过来再尝试重新build一次看看效果如何变化.[^3] --- ### 示例代码片段展示正常初始化过程 下面是基于Python实现的一个简单例子演示怎样正确地利用cv2.TrackerKCF_create()函数来启动视频流内的物体检测任务: ```python import cv2 # Read first frame of the video sequence cap = cv2.VideoCapture('input_video.mp4') ret,frame = cap.read() # Define an initial bounding box around object we want to track bbox = cv2.selectROI(frame,False) # Initialize tracker with first frame and bounding box tracker = cv2.TrackerCSRT_create() ok = tracker.init(frame,bbox) while True: # Capture next frame from camera feed/video file etc.. ret ,frame= cap.read() if not ret: break timer = cv2.getTickCount() # Update tracker on current frame using previously defined region-of-interest coordinates info ok,bbox=tracker.update(frame) fps = cv2.getTickFrequency()/(cv2.getTickCount()-timer); if ok: p1=(int(bbox[0]), int(bbox[1])) p2=(int(bbox[0]+ bbox[2]), int(bbox[1]+ bbox[3])) cv2.rectangle(frame,p1,p2,(255,0,0),2,1) else : cv2.putText(frame,"Tracking failure detected",(100,80), cv2.FONT_HERSHEY_SIMPLEX,.75,(0,0,255),2); cv2.imshow("Tracking",frame) k=cv2.waitKey(1)&0xff if k==27 : # press ESC key to exit loop prematurely break cap.release() cv2.destroyAllWindows() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值