最近项目有个需求,在ROR开发中用视图和存储过程
由于我们考虑使用视图,而在rails迁移文件有create_table方法,所以我们得找到能否在迁移文件里面创建视图 (create_view方法),通过查找rails2.3.5 api并没有找到方法
由于项目需求中涉及很多计算,从性能上考虑,我们准备使用存储过程,通过查找rails调用mysql存储过程的相关资料,得出的结论是:存储过程要在mysql端手动创建,在rails中只能调用返回单结果集的存储过程,相关代码如下:
返回单结果集:
创建存储过程
Max_grade()
CREATE DEFINER=`root`@`localhost` PROCEDURE `Max_grade`()
BEGIN
SELECT id FROM students WHERE grade_point_average=4;
END;
rails端调用:
def procedure
sql=ActiveRecord::Base.connection();
@result=sql.select_value('call Max_grade()');
respond_to do |format|
format.html
format.xml { render :xml => @result}
end
end
在procedure.html.erb文件中的代码为<%=@result%>,页面就显示 2
返回多结果集:
创建存储过程
Max_grade()
CREATE DEFINER=`root`@`localhost` PROCEDURE `Max_grade`()
BEGIN
SELECT * FROM students WHERE grade_point_average=4;
END;
rails端调用:
def edit
@student = Student.find_by_sql('call Max_grade()');
end
这样在进入edit.html.erb页面时就显示错误 “Mysql::Error: Commands out of sync; you can't run this command now: SHOW FIELDS FROM `students`”
查找一些资料 并没有找到解决办法