sobota, 14 stycznia 2012

param_protected wycina potrzebne parametry

param_protected to świetny gem, który przenosi funkcjonalność attr_accessible oraz attr_protected do kontrolerów. Składnia jest bardzo prosta:

class PostsControllers < ApplicationController
param_accessible [post: [:title, :content, category: [:name]], only: [:create]
param_protected :accepted, only: [:create, :update]
end
Jedyny problem jest taki, że nie ma defaultowej listy dozwolonych parametrów. Tzn. że wycinane są takie atrybuty jak action, controller, id, utf8 czy (w przypadku używania devise) authenticity_token. Formularze nie będą przez to działać poprawnie, będziemy cały czas wylogowywani itd.

Rozwiązanie jest na szczęście banalnie proste:

# /app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
include Controllers::WhitelistParams
end
# /lib/controllers/whitelist_params.rb
module Controllers
module WhitelistParams
extend ActiveSupport::Concern
included do
param_accessible [:controller, :action, :id, :utf8, :commit, :authenticity_token, :page]
end
end
end

Brak komentarzy:

Prześlij komentarz