• Server management tool • Minimalistic features • Provides API to retrieve hosts, etc. • Copes with complicated demands with loose-coupled architecture • Written in Rails 4
I’ll talk to you about the Rails4 changes from my point of view, that is, changes which I bumped into actually while developing Triglav with Edge Rails these days. It must be also applicable to any other common web apps.
create_table :messages do |t| t.references :person end add_index :messages, :person_id index option create_table :messages do |t| t.references :person, index: true end We never neglect to add indices!
Clunky JavaScript helpers will be removed • button_to_function • link_to_function It might cost you some long time than you’ll expect if you use them heavily
active_record_deprecate_finders ... can be written as below for now, until Rails5: Post.scoped(:where => { :comments_count => 10 }, :limit => 5) Post.where(comments_count: 10).limit(5) “The code to implement the deprecated features has been moved out to the active_record_deprecated_finders gem. This gem is a dependency of Active Record in Rails 4.0. It will no longer be a dependency from Rails 4.1, but if your app relies on the deprecated features then you can add it to your own Gemfile. It will be maintained by the Rails core team until Rails 5.0 is released.” -- Rails4 Release Notes
class Person < ActiveRecord::Base attr_accessible :name, :age end attr_accessible (Old Way) “Before Strong Parameters arrived, mass-assignment protection was a model's task provided by Active Model. This has been extracted to the ProtectedAttributes gem. In order to use attr_accessible and attr_protected helpers in your models, you should add protected_attributes to your Gemfile.” Ruby On Rails Security Guide http://edgeguides.rubyonrails.org/security.html
class Person < ActiveRecord::Base include ActiveModel::ForbiddenAttributesProtection end class PeopleController < ActionController::Base def create Person.create(person_params) end private def person_params params.require(:person).permit(:name, :age) end end ActionController::Parameters
class Person has_many :pets accepts_nested_attributes_for :pets end # PeopleController def person_params params.require(:person).permit( :name, :age, pets_attributes: [ :name, :category ] ) end accepts_nested_attribute_for Pass *_attributes as an Array
# PeopleController def person_params params.require(:person).permit( :name, :age, pets_attributes: [ :name, :category :id, :_destroy ] ) end accepts_nested_attribute_for Both :id and :_destroy seem to be needed to update/delete nested models
“The basic queue that comes with Rails is not a long-term solution. The goal here is to establish a common API that more robust queueing systems can plug themselves into. In most cases you shouldn't need to change any of your app code if you want to switch from Resque toSidekiq. You should take care that the objects you are enqueing can be properly marshalled.” http://reefpoints.dockyard.com/ruby/2012/06/25/rails-4-sneak-peek-queueing.html Rails 4.0 Sneak Peek: Queueing
class MyController < ActionController::Base include ActionController::Live def index 100.times { response.stream.write "hello world\n" } response.stream.close end end Live streaming
Works fine with “Server-Sent Events” “This specification defines an API for opening an HTTP connection for receiving push notifications from a server in the form of DOM events. The API is designed such that it can be extended to work with other push notification schemes such as Push SMS.” http://www.w3.org/TR/eventsource/ W3C: Server-Sent Events
“I thought streaming was already introduced in Rails 3.2. How is this different? Yes, streaming templates were added to Rails 3.2. The main difference between Live Streaming and Streaming Templates is that with Streaming Template, the application developer could not choose what data was sent to the client and when. Live Streaming gives the application developer full control of what data is sent to the client and when.” http://tenderlovemaking.com/2012/07/30/is-it-live.html IS IT LIVE?
RECAP • Living on the Edge Rails is fun and good lesson • Rails4 is really promising and exciting • Try Rails4 as soon as possible! • I’m wating for your commit to Triglav ;)