我的代码中有一个查询,如下所示
@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_date
,current_date
,因为它会将其置于自己的位置。它还会将orderid
置于其自身(auto_increment
)。
我正在寻找一种方法将上述查询转换为ActiveRecord
Rails方式,但仍然可以将orderid
放在我自己的session[:ordersid]
上。我不想依赖auto_increment
,因为那时我将不得不重构其他代码。这可能是一个快速而肮脏的修复,但我想知道这种灵活性是否在rails中提供?
我多次想过这个问题。为什么轨道不能让我拥有这种灵活性?
答案 0 :(得分:0)
你似乎遇到了很多麻烦,或者我错过了一些东西。 ActiveRecord做事的方式是,imho手动
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而不是自动增量。
当我看到这段代码时,我有一个评论。通常,对于userid
和storeid
,可以使用内置于rails中的固有关系功能。
例如,如果付款与用户相关,则您可以
user.payments.build(params[:payment])
然后新创建的付款会自动链接到该用户。 或
payment.user = current_user
如果你有像
这样的东西belongs_to :user
在你的模型中。 也许你已经知道所有这些,很难从你的问题中解决。