Screencast: attr_accessible dynamisch setzen

Um Attribute eines Datenbank-Objekts zu schützen, kann in Rails auf attr_accessible zurückgegriffen werden. Damit wird verhindert, dass bei Mass Assingments bestimmte Attribute nicht verändert werden. Wenn der Zugriff/die Veränderung auf Basis von Zugriffsrechten erfolgen soll, muss attr_accessible dynamisch gesetzt werden. Wie dies funktioniert, zeigt Ryan in diesem Screencast

 

Download:

Download(16 MB, 9:12)
Alternativer Download für iPod & Apple TV(15 MB, 9:12)

 

Resourcen:

 

Quellcode:

[ruby]
# config/initializers/accessible_attributes.rb
class ActiveRecord::Base
attr_accessible
attr_accessor :accessible

private

def mass_assignment_authorizer
if accessible == :all
self.class.protected_attributes
else
super + (accessible || [])
end
end
end

# models/article.rb
class Article < ActiveRecord::Base
attr_accessible :name, :content
end

# articles_controller.rb
def create
@article = Article.new
@article.accessible = :all if admin?
@article.attributes = params[:article]
if @article.save
flash[:notice] = "Successfully created article."
redirect_to @article
else
render :action => ’new‘
end
end

def update
@article = Article.find(params[:id])
@article.accessible = :all if admin?
if @article.update_attributes(params[:article])
flash[:notice] = "Successfully updated article."
redirect_to @article
else
render :action => ‚edit‘
end
end
[/ruby]