2010-05-03 62 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 

。 也许你已经意识到了这一切,但很难弥补你的问题。

相关问题