Screencast: ActiveAttr in eigenen Klassen verwenden

Die Entwickler von ActiveAttr sagen, dass ihr Plugin die Dinge zur Verfügung stellt, welche nicht von ActiveModel geliefert werden. Das Plugin bietet wirklich einige interessante Ansätze und erleichtert die Arbeit mit selbst-erstellen Modelen um einiges. Ryan zeigt in diesem Screencast wie es zum Beispiel in Modelen ohne zugehörige Datenbank-Tabelle eingesetzt werden kann.

 

Downloads in verschiedenen Formaten:

mp4
m4v
webm
ogg

 

Resourcen:

Gemfile

[ruby]
gem ‚active_attr‘
[/ruby]

models/message.rb

[ruby]
class Message
include ActiveAttr::Model

attribute :name
attribute :email
attribute :content
attribute :priority # type: Integer, default: 0

attr_accessible :name, :email, :content
validates_presence_of :name
validates_format_of :email, :with => /^[-a-z0-9_+.]+@([-a-z0-9]+.)+[a-z0-9]{2,4}$/i
validates_length_of :content, :maximum => 500
end
[/ruby]

rails console

[ruby]
m = Message.new(priority: 1)
m.priority
m.priority = 1
m.priority?
[/ruby]

controllers/messages_controller.rb

[ruby]
def new
@message = Message.new
end

def create
@message = Message.new(params[:message])
if @message.valid?
# TODO send message here
redirect_to root_url, notice: "Message sent! Thank you for contacting us."
else
render "new"
end
end
[/ruby]

Screencast: Daten an JavaScript übergeben

Fast jeder hatte bereits die Anforderung Daten zwischen einer Rails-Applikation im Backend mit Java-Script im Frontend auszutauschen. Sei es auch nur um bestimmte Teile der Seite mit Java-Script zu markieren (z.B. Highlighting von Navigation oder Suchbegriffen). Es gibt verschiedenste Ansätze und alle bringen ihre eigenen Vor- und Nachteile mit. In diesem Screencast zeigt Ryan Drei verschiedene Ansätze wie es auch implementiert werden kann.

 

Downloads in verschiedenen Formaten:

mp4
m4v
webm
ogg

 

Resourcen:

products/index.html.erb

[html]
<%= javascript_tag do %>
window.productsURL = "<%=j products_url %>";
window.products = <%=raw Product.limit(10).to_json %>;
<% end %>
[/html]

app/assets/javascripts/products.js.coffee

[javascript]
jQuery ->
alert productsURL
[/javascript]

products/index.html.erb

[html]
<%= content_tag "div", id: "products", data: {products: Product.limit(10)} do %>
Loading products…
<% end %>
[/html]

app/assets/javascripts/products.js.coffee

[javascript]
jQuery ->
alert $(‚#products‘).data(‚products‘)
[/javascript]

Gemfile

[ruby]
gem ‚gon‘
[/ruby]

layouts/application.html.erb

[html]
<%= include_gon %>
[/html]

products_controller.rb

[ruby]
def index
gon.products = Product.limit(10)
# or
gon.rabl "app/views/products/index.json.rabl", as: "products"
end
[/ruby]

products/index.json.rabl

[javascript]
collection Product.limit(10)

attributes :id, :name, :price
[/javascript]

app/assets/javascripts/products.js.coffee

[javascript]
alert gon.products if gon
[/javascript]

Screencast: RABL – Ruby API Builder Language

RABL ist ein Templating-System für die Frameworks Ruby on Rails und Padrino. Es soll den Entwickler bei der Erstellung von JSON und Generierung von Documenten mittels ActiceRecords „to_json“ unterstützen. Besonders bei komplexen JSON Dokumenten bietet einige Helfer welche die Arbeit erleichtern sollen. In diesem Screencast erfahrt ihr wie die RABL DSL eingesetzt werden kann, um JSON und XML Responses in Rub-Applikationen zu estellen.

 

Downloads in verschiedenen Formaten:

mp4
mp4
webm
ogg

 

Resourcen:

Gemfile

[ruby]
gem ‚rabl‘
[/ruby]

config/initializers/rabl_config.rb

[ruby]
Rabl.configure do |config| config.include_json_root = false end
[/ruby]

app/views/articles/show.json.rabl

[javascript]
object @article
attributes :id, :name, :published_at

if current_user.admin?
node(:edit_url) { |article| edit_article_url(article) }
end

child :author do
attributes :id, :name
node(:url) { |author| author_url(author) }
end

child :comments do
attributes :id, :name, :content
end
[/javascript]

app/views/articles/index.json.rabl

[javascript]
collection @articles

extends "articles/show"
[/javascript]

app/views/articles/index.html.erb

[html]
<div id="articles" data-articles="<%= render(template: "articles/index.json.rabl") %>">
[/html]