0

invoicesRailsアプリケーションでいくつかを作成するためのrakeタスクがあります。

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

私はこれがなぜ起こるのか知っています。

しかし、私はこのレーキタスクを実行する必要があり、大量割り当てなどを強制する方法があるのだろうか?

各請求書project_idは、メソッドによって自動的に設定されますinvoices.create!。しかし、私も設定する必要がある場合はどうuser_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 に答える