0

invoices我有一个 rake 任务要在我的 Rails 应用程序中创建一些:

def make_invoices
  Project.all.each do |project|
    i = project.invoices.create!( :number     => random_number,
                                  :date       => random_date,
                                  :recipient  => random_recipient,
                                  :user_id    => project.person.user.id)        
    i.created_at = random_time
    i.save
  end
end

但是,此行会导致 rake 任务失败:

:user_id => project.person.user.id

我收到以下错误:

Can't mass-assign protected attributes: user_id

我知道为什么会这样。

但是我需要运行这个 rake 任务,我想知道是否有任何方法可以强制进行批量分配或其他什么?

每个发票project_id都是由该invoices.create!方法自动设置的。但是如果我也需要设置 auser_id怎么办?

谢谢你的帮助。

4

2 回答 2

1

您需要在调用之外执行此操作create并将其更改为build

def make_invoices
  Project.all.each do |project|
    i = project.invoices.build( :number     => random_number,
                                  :date       => random_date,
                                  :recipient  => random_recipient)   

    i.user_id = project.person.user.id
    i.save!

    i.created_at = random_time
    i.save
  end
end
于 2013-01-30T17:37:53.097 回答
1

(可能重复“有没有办法绕过批量分配保护?”

似乎assign_attributes可以做到这一点:

user = User.new
user.assign_attributes({ :name => 'Josh', :is_admin => true }, :without_protection => true)
user.name       # => "Josh"
user.is_admin?  # => true
于 2013-01-30T17:50:22.017 回答