最近項目有個需求,在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`”
尋找一些資料 並沒有找到解決辦法