KEMBAR78
Desenvolvimento web com Ruby on Rails (extras) | PDF
Desenvolvimento
Web com Ruby on
Rails
João Lucas Pereira de Santana
gtalk | linkedin | twitter: jlucasps
Extras
Extras
@jlucasps
$ git add .
$ git commit -m "Configurando o Devise"
Criar rotas para BillsController#new
match 'new_bill' => 'bills#new', :as => :new_bill
match 'create_bill' => 'bills#create_bill', :as => :create_bill
Criar action
def new
@bill = Bill.new
@users = User.all
end
Extras
@jlucasps
Alterar template /app/views/welcome/index.html.erb
<div class="span9">
<% label = "<i class='icon-user'></i>&nbsp;#{t('users')}".html_safe
%>
<%= link_to label, users_path, :class => "btn btn-large" %>
<%= link_to t('new_bill'), new_bill_path, :class => "btn btn-
large btn-success" %>
</div>
<%= content_for :sidebar do %>
<%= render :partial => 'shared/sidebar' %>
<% end %>
Extras
@jlucasps
Criar template /app/views/bills/new.html.erb
<h4><%= t('new_bill') %></h4>
<%= form_tag(create_bill_path) do %>
<%= render :partial => 'shared/error_messages' , :locals => {:resource => @bill} %>
<%= label_tag :user_id %>
<%= select_tag :user_id, options_from_collection_for_select(@users, :id, :name, @bill.
user_id) %>
<%= label_tag :name %>
<%= text_field_tag :name, @bill.name %>
<%= label_tag :description %>
<%= text_field_tag :description, @bill.description %>
<%= label_tag :date %>
<%= text_field_tag :date, @bill.date %>
<%= label_tag :value %>
<%= text_field_tag :value, @bill.value %>
<div class='actions'>
<%= submit_tag t('save'), :class => 'btn btn-success' %>
</div>
<% end %>
Extras
@jlucasps
Criar a action BillsController#create_bill
def create_bill
@bill = Bill.new(:user_id => params[:user_id], :name =>
params[:name])
@bill.description = params[:description]
@bill.date = params[:date]
@bill.value = params[:value]
if @bill.save
redirect_to @bill.user
else
@users = User.all
render :new
end
end
Extras
@jlucasps
Criar uma migration para a tabela comments
class CreateTableComments < ActiveRecord::
Migration
def change
create_table :comments do |t|
t.references :bill, :foreign_key => true
t.column :content, :string, :null => false
t.timestamps
end
end
end
Extras
@jlucasps
Executar migration
jlucasps@lotus:/media/truecrypt1/handsonrails/first_app$ rake db:
migrate
== CreateTableComments: migrating
==========================================
==
-- create_table(:comments)
-> 0.0670s
== CreateTableComments: migrated (0.0672s)
===================================
Extras
@jlucasps
Criar model Comment: /app/models/comment.rb
class Comment < ActiveRecord::Base
# Attrs accessible
attr_accessible :content, :bill_id
# Validations
validates :content, :presence => true, :allow_blank => false
validates :bill_id, :presence => true
# Associations
belongs_to :bill
# Scopes
default_scope order("comments.created_at DESC")
# Públic methods
end
Extras
@jlucasps
Alterar model Bill para adicionar relacionamento
class Bill < ActiveRecord::Base
# Attrs accessible
attr_accessible :name, :description, :user_id, :date, :value
# Validations
validates :name, :presence => true, :allow_blank => false
validates :user_id, :presence => true
validates :date, :presence => true
validates :value, :presence => true
# Associations
belongs_to :user
has_many :comments
...
end
Extras
@jlucasps
irb(main):002:0> bill = Bill.first
Bill Load (0.5ms) SELECT "bills".* FROM "bills" ORDER BY bills.date
DESC LIMIT 1
=> #<Bill id: 15, name: "123", description: "45", user_id: 9, date:
"2013-06-12 00:00:00", value: #<BigDecimal:3bc4e60,'0.124E3',9(36)
>, created_at: "2013-06-19 01:17:36", updated_at: "2013-06-19 01:17:
36">
irb(main):003:0> comment = Comment.new :bill_id => bill.id, :
content => "Conteúdo do comentário"
=> #<Comment id: nil, bill_id: 15, content: "Conteúdo do comentário",
created_at: nil, updated_at: nil>
irb(main):004:0> comment.save
(0.1ms) begin transaction
SQL (43.4ms) INSERT INTO "comments" ("bill_id", "content",
"created_at", "updated_at") VALUES (?, ?, ?, ?) [["bill_id", 15],
["content", "Conteúdo do comentário"], ["created_at", Tue, 25 Jun 2013
14:30:13 UTC +00:00], ["updated_at", Tue, 25 Jun 2013 14:30:13 UTC
+00:00]]
(393.4ms) commit transaction
Extras
@jlucasps
irb(main):005:0> bill.comments
Comment Load (0.4ms) SELECT "comments".* FROM "comments"
WHERE "comments"."bill_id" = 15 ORDER BY comments.created_at
DESC
=> [#<Comment id: 1, bill_id: 15, content: "Conteúdo do comentário",
created_at: "2013-06-25 14:30:13", updated_at: "2013-06-25 14:30:
13">]
irb(main):006:0> bill.comments.count
(0.3ms) SELECT COUNT(*) FROM "comments" WHERE "comments"."
bill_id" = 15
=> 1
irb(main):007:0> comment.bill
Bill Load (0.4ms) SELECT "bills".* FROM "bills" WHERE "bills"."id" = 15
ORDER BY bills.date DESC LIMIT 1
=> #<Bill id: 15, name: "123", description: "45", user_id: 9, date:
"2013-06-12 00:00:00", value: #<BigDecimal:42d7f68,'0.124E3',9(36)
>, created_at: "2013-06-19 01:17:36", updated_at: "2013-06-19 01:
17:36">
irb(main):008:0>
Extras
@jlucasps
E se quisermos adicionar comentários em outras entidades ?
jlucasps@lotus:/media/truecrypt1/handsonrails/first_app$ rails g migration
ChangeCommentsTable
invoke active_record
create db/migrate/20130625143912_change_comments_table.rb
class ChangeCommentsTable < ActiveRecord::Migration
def up
add_column :comments, :commentable_id, :integer
add_column :comments, :commentable_type, :string
remove_column :comments, :bill_id
end
def down
remove_column :comments, :commentable_id
remove_column :comments, :commentable_type
add_column :comments, :bill_id, :integer
end
end
Extras
@jlucasps
class Comment < ActiveRecord::Base
# Attrs accessible
attr_accessible :content, :bill_id
# Validations
validates :content, :presence => true, :allow_blank => false
validates :commentable_id, :presence => true
validates :commentable_type, :presence => true
# Associations
belongs_to :commentable, :polymorphic => true
# Scopes
default_scope order("comments.created_at DESC")
end
/app/models/comment.rb
Extras
@jlucasps
# Associations
belongs_to :user
has_many :comments, :as => :commentable
/app/models/bill.rb
/app/models/user.rb
# Associations
has_many :bills, :dependent => :destroy
has_many :comments, :as => :commentable
Extras
@jlucasps
jlucasps@lotus:/media/truecrypt1/handsonrails/first_app$ rails
console
Loading development environment (Rails 3.2.13)
irb(main):002:0> user = User.last
User Load (0.4ms) SELECT "users".* FROM "users" ORDER BY "users"."
id" DESC LIMIT 1
=> #<User id: 11, name: "teste100@teste.com", email:
"teste100@teste.com", age: nil, created_at: "2013-06-25 01:27:25",
updated_at: "2013-06-25 01:27:25", gender: nil, encrypted_password:
"$2a$10$hMAd4RUymIzxw1JGARKJC.M1hEiAwD0PpwS6uwM9j2RR...",
reset_password_token: nil, reset_password_sent_at: nil,
remember_created_at: nil, sign_in_count: 1, current_sign_in_at: "2013-
06-25 01:27:25", last_sign_in_at: "2013-06-25 01:27:25",
current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1">
irb(main):003:0> user.comments
Comment Load (0.2ms) SELECT "comments".* FROM "comments"
WHERE "comments"."commentable_id" = 11 AND "comments"."
commentable_type" = 'User' ORDER BY comments.created_at DESC
=> []
irb(main):004:0>
Extras
@jlucasps
irb(main):003:0> comment = Comment.new :content =>
"Comentário para um usuário"
=> #<Comment id: nil, content: "Comentário para um usuário",
created_at: nil, updated_at: nil, commentable_id: nil, commentable_type:
nil>
irb(main):004:0> comment.commentable = user
=> #<User id: 11, name: "teste100@teste.com", email: "teste100@teste.com", age: nil,
created_at: "2013-06-25 01:27:25", updated_at: "2013-06-25 01:27:25", gender: nil,
encrypted_password: "$2a$10$hMAd4RUymIzxw1JGARKJC.M1hEiAwD0PpwS6uwM9j2RR...",
reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil,
sign_in_count: 1, current_sign_in_at: "2013-06-25 01:27:25", last_sign_in_at: "2013-06-25
01:27:25", current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1">
irb(main):005:0> comment.save
(0.1ms) begin transaction
SQL (63.5ms) INSERT INTO "comments" ("commentable_id", "commentable_type", "content",
"created_at", "updated_at") VALUES (?, ?, ?, ?, ?) [["commentable_id", 11],
["commentable_type", "User"], ["content", "Comentário para um usuário"], ["created_at", Tue,
25 Jun 2013 17:39:18 UTC +00:00], ["updated_at", Tue, 25 Jun 2013 17:39:18 UTC +00:
00]]
(405.1ms) commit transaction
=> true
Extras
@jlucasps
irb(main):008:0> bill = Bill.first
Bill Load (0.4ms) SELECT "bills".* FROM "bills" ORDER BY bills.date DESC LIMIT 1
=> #<Bill id: 15, name: "123", description: "45", user_id: 9, date: "2013-06-12 00:00:00", value:
#<BigDecimal:43384f8,'0.124E3',9(36)>, created_at: "2013-06-19 01:17:36", updated_at: "2013-
06-19 01:17:36">
irb(main):009:0> comment_2 = Comment.new :content => "Comentário
de uma conta"
=> #<Comment id: nil, content: "Comentário de uma conta", created_at: nil, updated_at: nil,
commentable_id: nil, commentable_type: nil>
irb(main):011:0> comment_2.commentable = bill
=> #<Bill id: 15, name: "123", description: "45", user_id: 9, date: "2013-06-12 00:00:00", value:
#<BigDecimal:41fbae0,'0.124E3',9(36)>, created_at: "2013-06-19 01:17:36", updated_at: "2013-
06-19 01:17:36">
irb(main):012:0> comment_2.save
(0.1ms) begin transaction
SQL (0.7ms) INSERT INTO "comments" ("commentable_id", "commentable_type", "content",
"created_at", "updated_at") VALUES (?, ?, ?, ?, ?) [["commentable_id", 15], ["commentable_type",
"Bill"], ["content", "Comentário de uma conta"], ["created_at", Tue, 25 Jun 2013 17:44:17 UTC
+00:00], ["updated_at", Tue, 25 Jun 2013 17:44:17 UTC +00:00]]
(430.8ms) commit transaction
=> true
irb(main):013:0> bill.comments
Comment Load (0.4ms) SELECT "comments".* FROM "comments" WHERE "comments"."
commentable_id" = 15 AND "comments"."commentable_type" = 'Bill' ORDER BY comments.
created_at DESC
=> [#<Comment id: 3, content: "Comentário de uma conta", created_at: "2013-06-25 17:44:17",
updated_at: "2013-06-25 17:44:17", commentable_id: 15, commentable_type: "Bill">]
Extras
@jlucasps
irb(main):014:0> comment.commentable
=> #<User id: 11, name: "teste100@teste.com", email:
"teste100@teste.com", age: nil, created_at: "2013-06-25 01:27:25",
updated_at: "2013-06-25 01:27:25", gender: nil, encrypted_password:
"$2a$10$hMAd4RUymIzxw1JGARKJC.M1hEiAwD0PpwS6uwM9j2RR...",
reset_password_token: nil, reset_password_sent_at: nil,
remember_created_at: nil, sign_in_count: 1, current_sign_in_at: "2013-
06-25 01:27:25", last_sign_in_at: "2013-06-25 01:27:25",
current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1">
irb(main):015:0> comment_2.commentable
=> #<Bill id: 15, name: "123", description: "45", user_id: 9, date:
"2013-06-12 00:00:00", value: #<BigDecimal:3ed9268,'0.124E3',9(36)
>, created_at: "2013-06-19 01:17:36", updated_at: "2013-06-19 01:17:
36">
irb(main):016:0>
Desenvolvimento
Web com Ruby on
Rails
João Lucas Pereira de Santana
gtalk | linkedin | twitter: jlucasps
Obrigado!

Desenvolvimento web com Ruby on Rails (extras)

  • 1.
    Desenvolvimento Web com Rubyon Rails João Lucas Pereira de Santana gtalk | linkedin | twitter: jlucasps Extras
  • 2.
    Extras @jlucasps $ git add. $ git commit -m "Configurando o Devise" Criar rotas para BillsController#new match 'new_bill' => 'bills#new', :as => :new_bill match 'create_bill' => 'bills#create_bill', :as => :create_bill Criar action def new @bill = Bill.new @users = User.all end
  • 3.
    Extras @jlucasps Alterar template /app/views/welcome/index.html.erb <divclass="span9"> <% label = "<i class='icon-user'></i>&nbsp;#{t('users')}".html_safe %> <%= link_to label, users_path, :class => "btn btn-large" %> <%= link_to t('new_bill'), new_bill_path, :class => "btn btn- large btn-success" %> </div> <%= content_for :sidebar do %> <%= render :partial => 'shared/sidebar' %> <% end %>
  • 4.
    Extras @jlucasps Criar template /app/views/bills/new.html.erb <h4><%=t('new_bill') %></h4> <%= form_tag(create_bill_path) do %> <%= render :partial => 'shared/error_messages' , :locals => {:resource => @bill} %> <%= label_tag :user_id %> <%= select_tag :user_id, options_from_collection_for_select(@users, :id, :name, @bill. user_id) %> <%= label_tag :name %> <%= text_field_tag :name, @bill.name %> <%= label_tag :description %> <%= text_field_tag :description, @bill.description %> <%= label_tag :date %> <%= text_field_tag :date, @bill.date %> <%= label_tag :value %> <%= text_field_tag :value, @bill.value %> <div class='actions'> <%= submit_tag t('save'), :class => 'btn btn-success' %> </div> <% end %>
  • 5.
    Extras @jlucasps Criar a actionBillsController#create_bill def create_bill @bill = Bill.new(:user_id => params[:user_id], :name => params[:name]) @bill.description = params[:description] @bill.date = params[:date] @bill.value = params[:value] if @bill.save redirect_to @bill.user else @users = User.all render :new end end
  • 6.
    Extras @jlucasps Criar uma migrationpara a tabela comments class CreateTableComments < ActiveRecord:: Migration def change create_table :comments do |t| t.references :bill, :foreign_key => true t.column :content, :string, :null => false t.timestamps end end end
  • 7.
    Extras @jlucasps Executar migration jlucasps@lotus:/media/truecrypt1/handsonrails/first_app$ rakedb: migrate == CreateTableComments: migrating ========================================== == -- create_table(:comments) -> 0.0670s == CreateTableComments: migrated (0.0672s) ===================================
  • 8.
    Extras @jlucasps Criar model Comment:/app/models/comment.rb class Comment < ActiveRecord::Base # Attrs accessible attr_accessible :content, :bill_id # Validations validates :content, :presence => true, :allow_blank => false validates :bill_id, :presence => true # Associations belongs_to :bill # Scopes default_scope order("comments.created_at DESC") # Públic methods end
  • 9.
    Extras @jlucasps Alterar model Billpara adicionar relacionamento class Bill < ActiveRecord::Base # Attrs accessible attr_accessible :name, :description, :user_id, :date, :value # Validations validates :name, :presence => true, :allow_blank => false validates :user_id, :presence => true validates :date, :presence => true validates :value, :presence => true # Associations belongs_to :user has_many :comments ... end
  • 10.
    Extras @jlucasps irb(main):002:0> bill =Bill.first Bill Load (0.5ms) SELECT "bills".* FROM "bills" ORDER BY bills.date DESC LIMIT 1 => #<Bill id: 15, name: "123", description: "45", user_id: 9, date: "2013-06-12 00:00:00", value: #<BigDecimal:3bc4e60,'0.124E3',9(36) >, created_at: "2013-06-19 01:17:36", updated_at: "2013-06-19 01:17: 36"> irb(main):003:0> comment = Comment.new :bill_id => bill.id, : content => "Conteúdo do comentário" => #<Comment id: nil, bill_id: 15, content: "Conteúdo do comentário", created_at: nil, updated_at: nil> irb(main):004:0> comment.save (0.1ms) begin transaction SQL (43.4ms) INSERT INTO "comments" ("bill_id", "content", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["bill_id", 15], ["content", "Conteúdo do comentário"], ["created_at", Tue, 25 Jun 2013 14:30:13 UTC +00:00], ["updated_at", Tue, 25 Jun 2013 14:30:13 UTC +00:00]] (393.4ms) commit transaction
  • 11.
    Extras @jlucasps irb(main):005:0> bill.comments Comment Load(0.4ms) SELECT "comments".* FROM "comments" WHERE "comments"."bill_id" = 15 ORDER BY comments.created_at DESC => [#<Comment id: 1, bill_id: 15, content: "Conteúdo do comentário", created_at: "2013-06-25 14:30:13", updated_at: "2013-06-25 14:30: 13">] irb(main):006:0> bill.comments.count (0.3ms) SELECT COUNT(*) FROM "comments" WHERE "comments"." bill_id" = 15 => 1 irb(main):007:0> comment.bill Bill Load (0.4ms) SELECT "bills".* FROM "bills" WHERE "bills"."id" = 15 ORDER BY bills.date DESC LIMIT 1 => #<Bill id: 15, name: "123", description: "45", user_id: 9, date: "2013-06-12 00:00:00", value: #<BigDecimal:42d7f68,'0.124E3',9(36) >, created_at: "2013-06-19 01:17:36", updated_at: "2013-06-19 01: 17:36"> irb(main):008:0>
  • 12.
    Extras @jlucasps E se quisermosadicionar comentários em outras entidades ? jlucasps@lotus:/media/truecrypt1/handsonrails/first_app$ rails g migration ChangeCommentsTable invoke active_record create db/migrate/20130625143912_change_comments_table.rb class ChangeCommentsTable < ActiveRecord::Migration def up add_column :comments, :commentable_id, :integer add_column :comments, :commentable_type, :string remove_column :comments, :bill_id end def down remove_column :comments, :commentable_id remove_column :comments, :commentable_type add_column :comments, :bill_id, :integer end end
  • 13.
    Extras @jlucasps class Comment <ActiveRecord::Base # Attrs accessible attr_accessible :content, :bill_id # Validations validates :content, :presence => true, :allow_blank => false validates :commentable_id, :presence => true validates :commentable_type, :presence => true # Associations belongs_to :commentable, :polymorphic => true # Scopes default_scope order("comments.created_at DESC") end /app/models/comment.rb
  • 14.
    Extras @jlucasps # Associations belongs_to :user has_many:comments, :as => :commentable /app/models/bill.rb /app/models/user.rb # Associations has_many :bills, :dependent => :destroy has_many :comments, :as => :commentable
  • 15.
    Extras @jlucasps jlucasps@lotus:/media/truecrypt1/handsonrails/first_app$ rails console Loading developmentenvironment (Rails 3.2.13) irb(main):002:0> user = User.last User Load (0.4ms) SELECT "users".* FROM "users" ORDER BY "users"." id" DESC LIMIT 1 => #<User id: 11, name: "teste100@teste.com", email: "teste100@teste.com", age: nil, created_at: "2013-06-25 01:27:25", updated_at: "2013-06-25 01:27:25", gender: nil, encrypted_password: "$2a$10$hMAd4RUymIzxw1JGARKJC.M1hEiAwD0PpwS6uwM9j2RR...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 1, current_sign_in_at: "2013- 06-25 01:27:25", last_sign_in_at: "2013-06-25 01:27:25", current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1"> irb(main):003:0> user.comments Comment Load (0.2ms) SELECT "comments".* FROM "comments" WHERE "comments"."commentable_id" = 11 AND "comments"." commentable_type" = 'User' ORDER BY comments.created_at DESC => [] irb(main):004:0>
  • 16.
    Extras @jlucasps irb(main):003:0> comment =Comment.new :content => "Comentário para um usuário" => #<Comment id: nil, content: "Comentário para um usuário", created_at: nil, updated_at: nil, commentable_id: nil, commentable_type: nil> irb(main):004:0> comment.commentable = user => #<User id: 11, name: "teste100@teste.com", email: "teste100@teste.com", age: nil, created_at: "2013-06-25 01:27:25", updated_at: "2013-06-25 01:27:25", gender: nil, encrypted_password: "$2a$10$hMAd4RUymIzxw1JGARKJC.M1hEiAwD0PpwS6uwM9j2RR...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 1, current_sign_in_at: "2013-06-25 01:27:25", last_sign_in_at: "2013-06-25 01:27:25", current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1"> irb(main):005:0> comment.save (0.1ms) begin transaction SQL (63.5ms) INSERT INTO "comments" ("commentable_id", "commentable_type", "content", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?) [["commentable_id", 11], ["commentable_type", "User"], ["content", "Comentário para um usuário"], ["created_at", Tue, 25 Jun 2013 17:39:18 UTC +00:00], ["updated_at", Tue, 25 Jun 2013 17:39:18 UTC +00: 00]] (405.1ms) commit transaction => true
  • 17.
    Extras @jlucasps irb(main):008:0> bill =Bill.first Bill Load (0.4ms) SELECT "bills".* FROM "bills" ORDER BY bills.date DESC LIMIT 1 => #<Bill id: 15, name: "123", description: "45", user_id: 9, date: "2013-06-12 00:00:00", value: #<BigDecimal:43384f8,'0.124E3',9(36)>, created_at: "2013-06-19 01:17:36", updated_at: "2013- 06-19 01:17:36"> irb(main):009:0> comment_2 = Comment.new :content => "Comentário de uma conta" => #<Comment id: nil, content: "Comentário de uma conta", created_at: nil, updated_at: nil, commentable_id: nil, commentable_type: nil> irb(main):011:0> comment_2.commentable = bill => #<Bill id: 15, name: "123", description: "45", user_id: 9, date: "2013-06-12 00:00:00", value: #<BigDecimal:41fbae0,'0.124E3',9(36)>, created_at: "2013-06-19 01:17:36", updated_at: "2013- 06-19 01:17:36"> irb(main):012:0> comment_2.save (0.1ms) begin transaction SQL (0.7ms) INSERT INTO "comments" ("commentable_id", "commentable_type", "content", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?) [["commentable_id", 15], ["commentable_type", "Bill"], ["content", "Comentário de uma conta"], ["created_at", Tue, 25 Jun 2013 17:44:17 UTC +00:00], ["updated_at", Tue, 25 Jun 2013 17:44:17 UTC +00:00]] (430.8ms) commit transaction => true irb(main):013:0> bill.comments Comment Load (0.4ms) SELECT "comments".* FROM "comments" WHERE "comments"." commentable_id" = 15 AND "comments"."commentable_type" = 'Bill' ORDER BY comments. created_at DESC => [#<Comment id: 3, content: "Comentário de uma conta", created_at: "2013-06-25 17:44:17", updated_at: "2013-06-25 17:44:17", commentable_id: 15, commentable_type: "Bill">]
  • 18.
    Extras @jlucasps irb(main):014:0> comment.commentable => #<Userid: 11, name: "teste100@teste.com", email: "teste100@teste.com", age: nil, created_at: "2013-06-25 01:27:25", updated_at: "2013-06-25 01:27:25", gender: nil, encrypted_password: "$2a$10$hMAd4RUymIzxw1JGARKJC.M1hEiAwD0PpwS6uwM9j2RR...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 1, current_sign_in_at: "2013- 06-25 01:27:25", last_sign_in_at: "2013-06-25 01:27:25", current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1"> irb(main):015:0> comment_2.commentable => #<Bill id: 15, name: "123", description: "45", user_id: 9, date: "2013-06-12 00:00:00", value: #<BigDecimal:3ed9268,'0.124E3',9(36) >, created_at: "2013-06-19 01:17:36", updated_at: "2013-06-19 01:17: 36"> irb(main):016:0>
  • 19.
    Desenvolvimento Web com Rubyon Rails João Lucas Pereira de Santana gtalk | linkedin | twitter: jlucasps Obrigado!