2010-05-03 57 views
1

我在我的代碼查詢,如下如何傳統的查詢轉換爲ActiveRecord的Rails的方式

@sqladdpayment = "INSERT INTO payments (orderid, ttlprodcost, paytype, 
paystatus,created_at,updated_at,userid,storeid) 
VALUES ('" + session[:ordersid] + "', '" + session[:totalcost] + "', '" 
+ "1"+ "', '" + "complete" +"',current_date, current_date, '"+"1"+"','"+ "1"+"')" 

這裏表payments和主鍵是orderid。現在,我知道如果我將其轉換爲ActiveRecord的方式,那麼我不必將update_datecurrent_date,因爲它會把它放在它自己的。它也將自己也orderidauto_increment)。

我正在尋找一種方法來將上述查詢轉換爲ActiveRecord Rails方式,但仍然可以將orderid放在我自己的(session[:ordersid])上。我不想依賴auto_increment,因爲那樣我就不得不重構很多其他的代碼。這可能是一個快速和髒的修復,但我想知道這種類型的靈活性是否在rails中提供?

我很想知道這個問題。爲什麼不能讓我有這種靈活性?

回答

0

你似乎去了很多麻煩,或者我失去了一些東西。 做事情的ActiveRecord的方式是,恕我直言手動

payment = Payments.new 
payment.orderid = session[:ordersid] 
payment.totalcost = session[:totalcost] 
payment.paytype = 1 
payment.paystatus = "complete" 
payment.userid = 1 
payment.storeid = 1 
payment.save 

現在,如果你有一個表格填滿這些領域,它更容易:所以沒有必要爲

payment = Payment.new(params[:payment]) 
payment.save 

自動增量字段。如果你指定`ordersid'是id,你仍然可以手動設置這個值,這將會覆蓋rails標準行爲(除非你在數據庫中定義字段是自動增量)。

例如:an article顯示如何使用uuids代替自動增量。

我有一句話,當我看到這段代碼。通常對於useridstoreid,人們會使用內置於rails的內在關係功能。 舉例來說,如果支付與用戶,你要麼做

user.payments.build(params[:payment]) 

,然後將新創建的付款自動鏈接到用戶。 或者

payment.user = current_user 

如果你會在你的模型像

belongs_to :user 

。 也許你已經意識到了這一切,但很難彌補你的問題。

相關問題