Frage

Ich habe ein Modell, das, wenn es ein Objekt instanziiert, auch ein anderes Objekt mit derselben Benutzer -ID erstellt.

class Foo > ActiveRecord::Base

after_create: create_bar

private

def create_bar
  Bar.create(:user_id => user_id #and other attributes)
end

end

In bar.rb habe ich attr_proteciert, um es vor Hackern zu schützen.

class Bar > ActiveRecord::Base
  attr_protected :user_id, :created_at, :updated_at
end

So wie es jetzt aussieht, kann ich anscheinend kein neues Balkenobjekt erstellen, ohne entweder den attr_protectectected zu deaktivieren oder das Bemachungsobjekt von user_id leer zu lassen ...

Wie kann ich das Balkenobjekt das: user_id -Attribut von Foo akzeptieren lassen, ohne den Schutz vor attr_protected zu verlieren?

War es hilfreich?

Lösung

Versuchen Sie:

def create_bar
  bar = Bar.build(... other params ...)
  bar.user_id = user_id
  bar.save!
end

Andere Tipps

Beim Anruf new, create, oder find_or_create_by (und alle anderen, die am Ende rufen new) Sie können eine zusätzliche Option übergeben, without_protection: true.

http://api.rubyonrails.org/v3.2.22/classes/activerecord/base.html#method-new

attr_protected filtert die Attribute in der attributes= Methode wich wird aufgerufen new. Sie können Ihr Problem mit:

def create_bar
  returning Bar.new( other attributes ) do |bar|
    bar.user_id = user_id
    bar.save!
  end
end
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top