Rails渲染JSON对象而不是整个数组

时间:2015-02-06 00:46:12

标签: ruby-on-rails json

在我的控制器中,我有当前代码导致JSON数组,即使只有一个结果:

def getSharedSpecial
    @result = Campaign.find_by_sql("SELECT 
                                     id
                                    ,name
                                    ,image
                                    ,ad_caption
                                    ,ad_details
                                    FROM campaigns 
                                    WHERE id = " + params[:shared_campagin_id].to_s + " 
                                    LIMIT 1;")

    respond_to do |format|
        format.html
        format.json { render json: { special_shared: @result }}
    end         
end

返回:

"special_shared":[
     {
"id":41,
"name":"tester the way",
"image":{
      "url":"/uploads/campaign/image/41/Gilded_pic.jpg"
        },
"ad_caption":"yfftitu6",
"ad_details":"jku"
      }
   ]
}

[]可以看出,这是一个JSON数组。 如何只创建一个对象而不是整个数组呢?

1 个答案:

答案 0 :(得分:1)

问题是即使您只查找单个记录,find_by_sql也会返回一个数组。没有必要使用find_by_sql并且您已经通过这样做打开了SQL注入攻击,所以只需用传统方式编写查找器:

@result = Campaign.select(:id, :name, :image, :ad_caption, :ad_details).find(params[:shared_campagin_id])