2012-12-12 50 views
1

我在rails上運行ruby插入語句。但失敗了。這是代碼:我怎樣才能寫在軌道上的紅寶石插入語句?

class BookmarkController < ApplicationController 
    def index 

    if request.post? 
    @user_new = Bookmark.new(params[:user_new]) 
    tags = @user_new.tags.split(",") 
    @user_new = Bookmark.new(params[:user_new]) 
    query = "INSERT INTO bookmark (title , url, tags) VALUES (#{@user_new.title}, #{@user_new.url}, #{tags[0]}) " 

    Bookmark.connection.execute(query); 

    end 

    end 

但輸出是:

ActiveRecord::StatementInvalid in BookmarkController#index 

SQLite3::SQLException: near ".": syntax error: INSERT INTO bookmark (title , url, tags) VALUES (abhir, www.mrabhiram.tumblr.com, tumblr) 

任何人都可以建議我使用SQL INSERT語句插入記錄的正確方法?

+0

原始SQL不應該在控制器中。此外,您正在複製ActiveRecord附帶的功能。我建議閱讀[ActiveRecord指南](http://guides.rubyonrails.org/active_record_querying.html)。 –

回答

0

你需要對你的'價值'數據報價。喜歡的東西:

query = "INSERT INTO bookmark (title , url, tags) VALUES ('#{@user_new.title}', '#{@user_new.url}', '#{tags[0]}') " 
+0

非常感謝。工作很好。 –

+0

請勿使用此代碼!這是SQL注入的典型例子。您的用戶將能夠在您的數據庫上執行任意的SQL命令。 –

+0

這個答案會在這裏工作,並且是正確的語法,但正如所提到的,你不想在這裏做,因爲它是不安全的,並且有更好的Rails方法來完成同樣的事情。 – bigtex777

2

假設BookmarkActiveRecord子類,AR將保存這個你 - 無需編寫自定義的SQL - 的save方法將照顧這。你可以閱讀更多關於相關的ActiveRecord功能here

class BookmarkController < ApplicationController 
    def index 

    if request.post? 
    @user_new = Bookmark.new(params[:user_new]) 
    tags = @user_new.tags.split(",") 
    @user_new = Bookmark.new(params[:user_new]) 
    #query = "INSERT INTO bookmark (title , url, tags) VALUES (#{@user_new.title}, #{@user_new.url}, #{tags[0]}) " 

    #Bookmark.connection.execute(query); 
    # The save method will insert the record into the database. 
    @user_new.save()  

    end 

    end 
1

你可以寫

MOdel.connection.insert("INSERT INTO table_name(fields) VALUES('value')") 

它的工作...