我能够用硬编码的数量成功结账,即:
def checkout
nonce = params["payment_method_nonce"]
if current_user.braintree_id?
customer = Braintree::Customer.find(current_user.braintree_id)
else
@result = Braintree::Customer.create(
email: current_user.email,
payment_method_nonce: params[:payment_method_nonce]
)
customer = result.customer
current_user.update(braintree_id: customer.id)
end
@result = Braintree::Transaction.sale(
amount: **"10.00"**,
payment_method_nonce: nonce
)
if @result.success?
redirect_to root_path, notice: "You have successfully checked out"
else
flash[:alert] = "Something went wrong while processing your transaction"
render :new
end
end
让我们说我希望current_user能够以特定的价格购买我的投资组合的访问权限。它已存储在我的rails数据库中。有没有办法通过从数据库中的对象属性中提取数量来设置金额,即:"< = @portofolio_item.price>" ??我尝试了多次尝试并且没有任何运气。我能做错什么?
答案 0 :(得分:1)
正如Rails框架的文档中所述:
您需要从PortfolioItems模型的表中映射一个新字段。为了做到这一点,您首先需要通过创建迁移将该字段添加到表中,我建议使用小数,因为如果您在逗号后限制ammount,浮动可能会导致问题。
每个portfolio_item都应该将它的定价存储为十进制,比例为2:
t.decimal :price, scale: 2, precision: 5
这将允许该项目具有与之关联的价格,并将使方法:@portfolio_item.price
可用。
然后你只需要在控制器中更换:
@result = Braintree::Transaction.sale(
amount: **"10.00"**,
payment_method_nonce: nonce
)
使用:
@result = Braintree::Transaction.sale(
amount: @portfolio_item.price,
payment_method_nonce: nonce
)