【发布时间】:2013-07-03 22:59:33
【问题描述】:
我对 Ruby on Rails 比较陌生,我觉得我在这里做错了什么。我正在设置支付模式,但不知道如何处理可访问的属性。
我的 cash_transaction 模型有:
attr_accessible :billing_address_line_one, :billing_address_line_2, :billing_city, :billing_country, :billing_post_code, :payee_first_name, :payee_last_name, :card_expiry, :card_type
attr_accessor :card_number, :card_verification
好的,所以我想提交表单并验证,如果付款成功,将来可能会保存到数据库中。
如果我将:card_number, :card_verification 留在attr_accessible 中,Rails 会给出错误:
*未知属性card_number*
这很公平,因为我不想将其保存在我的数据库中。
当我尝试时:
@cash_transaction = current_user.cash_transactions.build(params[:cash_transaction])
当这些参数不在attr_accessible 中时,我会收到批量分配安全错误。
我已经解决了这两个错误:
@cash_transaction = current_user.cash_transactions.build(params[:cash_transaction].except(:card_number, :card_verification))
@cash_transaction.card_number = params[:cash_transaction][:card_number]
@cash_transaction.card_verification = params[:cash_transaction][:card_verification]
但这与使用哈希中包含的那些参数进行构建是一样的,所以我在作弊?
做什么?
【问题讨论】:
-
你所做的一切看起来都很好。
-
但是,看起来您应该能够批量分配虚拟属性。所以,只要你有
attr_accessor :card_number,你应该可以将它添加到attr_accessible并从params[:cash_transaction]设置它。 -
啊,好吧,所以两者都有?它似乎有效。
标签: ruby-on-rails ruby activerecord mass-assignment