3

这是我在支付控制器的创建操作中编写的代码。

user_id=Performer.find_by_first_name(params[:payment][:first_name]).user.id
email=Performer.find_by_first_name(params[:payment][:first_name]).user.email
@payment = Payment.new(user_id,params[:payment][:desc],params[:payment][:amount],email,params[:first_name])
#@payment = Payment.new(payment_params)

当我尝试这个时,我收到以下错误:

wrong number of arguments (5 for 0..1)

我不能只传递 的值,因此我需要在将其保存在表中之前对其进行更改。我该怎么做呢?

4

2 回答 2

2

它只接受属性的散列:

@payment = Payment.new(
  user_id: user_id,
  desc: params[:payment][:desc],
  amount: params[:payment][:amount],
  email: email,
  first_name: params[:first_name]
)

既然你在用Rails 4,我鼓励你看看strong_parameters

在将值保存到数据库之前更改它们

您可以使用before_save回调或定义自定义访问器。

1. 使用before_save回调:

如果要在将值保存到数据库之前更改值,可以使用before_save回调:

class Payment < ActiveRecord::Base
  before_save :change_values

private

  def change_values
    self.amount = amount.do_something
    # etc.
  end
end

API 文档:

2.使用自定义访问器:

或者您可以定义自定义访问器:

2.1read_attributewrite_attribute

def amount=(dollars)
  write_attribute :amount, dollars.do_something
end

def amount
  read_attribute(:amount).do_something
end

API 文档:

2.2 带虚拟属性:

def amount_in_dollars
  amount.do_something
end

def amount_in_dollars=(dollars)
  self.amount = dollars.do_something
end

Railscasts:

于 2013-10-04T11:58:14.567 回答
0
 @payment = Payment.new(:column_1 => value/params[:],:column_2 => params[:desc])

如果是表单提交

@payment = Payment.new(param[:payment])

外部表单提交

@payment.column_1 = value
于 2013-10-04T12:02:54.173 回答