Upgrading to Refinery 3.0
Upgrading a Refinery app to Refinery3, Rails 4.2
Remove old values from config files
- Delete
config.active_record.whitelist_attributes
. - Delete
config.active_record.mass_assignment_sanitizer
. - Delete
config.active_record.auto_explain_threshold_in_seconds
. - Change
config.serve_static_assets
toconfig.serve_static_files
. - Set
config.eager_load
tofalse
(dev and test),true
(production).
Add secrets.yml
See the ruby upgrade guide for exact details
In your models and controllers
-
Remove
attr_accessible
statements in your models. Control of which model attributes can be updated has moved from the model to the controller. This feature is known asStrong Parameters
. -
Add the attributes as strong parameters in your controllers.
Example:
Before
#app/models/person.rb
...
attr_accessible :name, :title
...
After
#app/controllers/people_controller.rb
def new
@person = Person.new(new_person_params)
....
def update
if @person.update(person_params)
etc
...
protected
def new_person_params
params.require(:person).permit(:name)
end
def person_params
params.require(:person).permit(:name, :title)
end
NOTE: different actions can permit different sets of attributes, or all actions can share a single set of permitted attributes. In the example above the create
action can only set the person's name, while the update
action can set the name and title.
In Engines and Extensions
In admin controllers
If your app or extension uses Refinery's crudify you must define a strong parameters method, as crudify
will call it (whether you need it nor not). It can be a no-op, thus:
def mymodel_params
end
No more dashboard
The Refinery dashboard has gone.
From engine.db
remove the code which linked to the dashboard and avoid the deprecation notice.
plugin.activity = {...}
FriendlyId Changes
In order to continue allowing .find(id)
to work:
friendly_id :title, use: :slugged
needs to become:
friendly_id :title, use: [:slugged, :finders]
There are also some other major changes in friendly_id: https://github.com/norman/friendly_id
Refinery Upgrade
run
rails generate refinery:cms --update
NOTE: this will run rake db:migrate
and rake db:seed
If you are using Refinerycms-blog
run
rake acts_as_taggable_on_engine:install:migrations
If you are using Devise
See https://github.com/refinery/refinerycms-authentication-devise
Check files that you have over-ridden
Check your app for any Refinery files that you may have over-ridden.
Compare them to the new Refinery files
- Do you still need to override them?
- Are there changes you need to include in your copy of the file?
- Is there another way of making your change without overriding?
Making changes to Refinery's default behavour using presenters and decorators will make future upgrades easier as your changes are separate from Refinery itself.
Refinery::Search changes
In application.rb
delete
config.to_prepare do
Refinery.searchable_models = Refinery::Page
end
Create config/initializers/refinery/search.rb
with an entry similar to the following
#config/initializers/refinery/search.rb
Refinery::Search.configure do |config|
config.enable_for = ['Refinery::Page']
end
Search Route
- The url helper method has been renamed from
refinery.search_path
torefinery.search_root_path
- The search method has changed from POST to GET
More information in refinerycms-search documentation