Rails send_data与oracle增强适配器

时间:2013-07-16 16:41:08

标签: ruby-on-rails oracle activerecord

我在检索在传统oracle数据库中存储为blob的映像时遇到问题。当我转到http://server/images/id/type时,收到no implicit conversion of Symbol into Integer错误。

我有以下设置:

的Gemfile

gem 'rails', '3.2.13'
gem 'activerecord-oracle_enhanced-adapter'
gem 'ruby-oci8'

表格

CREATE TABLE "SCHEMA"."IMAGE_TABLE" 
(   "IMG_TYPE_SEQ_NO" NUMBER(12,0), 
"IMG_TYPE" VARCHAR2(10 BYTE), 
"IMG_DESC" VARCHAR2(60 BYTE), 
"IMG_LENGTH" NUMBER, 
"IMG_BLOB" BLOB
);

模型

class Image < ActiveRecord::Base
self.table_name = 'schema.image_table'

def self.image_by_id_and_type(id, type)
  where(
    'img_type_seq_no = :id and img_type = :type',
     id: id, type: type
  )
end

控制器

class ImagesController < ApplicationController

  def show_image
    @image = Image.image_by_id_and_type(params[:id], params[:type])
    send_data @image[:img_blob], type: 'image/gif', disposition: 'inline'
  end

end

我尝试使用send_data @image.img_blob并因此遇到undefined method错误。

我做错了什么?

谢谢, 克里斯

更新

我想知道是否存在类型转换问题。 blob图像通过java swing应用程序保存,该应用程序将其转换为java字节数组。这可能是问题吗?如果是这样,我如何将java字节数组转换为send_data可以理解的内容?

2 个答案:

答案 0 :(得分:0)

这是一个疯狂的猜测。请尝试

def show_image
    @image = GiftCardImage.image_by_id_and_type(params[:id].to_i, params[:type])
    send_data @image[:img_blob], type: 'image/gif', disposition: 'inline'
end

在你的模特中

class Image < ActiveRecord::Base
self.table_name = 'schema.image_table'

def self.image_by_id_and_type(id, type)
  where("img_type_seq_no = ? and img_type = ?", id, type)
end

答案 1 :(得分:0)

@image = Image.image_by_id_and_type(params[:id], params[:type])

返回一个ActiveRecord :: Relation对象,所以为了从中获取实际值,我不得不调用first

send_data @image.first[:img_blob], type: 'image/gif', disposition: 'inline'