У меня странная маленькая проблема с Rails. Представьте себе пустой класс Invitation, унаследованный от ActiveRecord :: Base. В базе данных sqlite3 есть одно приглашение, но ActiveRecord не может найти его по атрибуту token . Продолжайте, пока мы пытаемся найти его, и посмотрим, сможете ли вы выяснить, почему.
0 urzatron work/sunrise % rails c
Loading development environment (Rails 3.1.0)
irb(main):001:0> Invitation.all
Invitation Load (0.5ms) SELECT "invitations".* FROM "invitations"
=> [#<Invitation id: 1, accepted_at: nil, assignment_id: 1, contact: "dean@example.net", network: "email", sender_id: 1, sent_at: "2011-11-07 02:50:10", token: "41a673223a2b059b212ca3753896d3fd38e1d1dd">]
irb(main):002:0> Invitation.find_by_token "41a673223a2b059b212ca3753896d3fd38e1d1dd"
Invitation Load (0.8ms) SELECT "invitations".* FROM "invitations" WHERE "invitations"."token" = '41a673223a2b059b212ca3753896d3fd38e1d1dd' LIMIT 1
=> nil
irb(main):003:0> Invitation.find 1
Invitation Load (82.7ms) SELECT "invitations".* FROM "invitations" WHERE "invitations"."id" = ? LIMIT 1 [["id", 1]]
=> #<Invitation id: 1, accepted_at: nil, assignment_id: 1, contact: "dean@example.net", network: "email", sender_id: 1, sent_at: "2011-11-07 02:50:10", token: "41a673223a2b059b212ca3753896d3fd38e1d1dd">
irb(main):004:0> Invitation.where( :token => "41a673223a2b059b212ca3753896d3fd38e1d1dd" ).first
Invitation Load (0.6ms) SELECT "invitations".* FROM "invitations" WHERE "invitations"."token" = '41a673223a2b059b212ca3753896d3fd38e1d1dd' LIMIT 1
=> nil
Итак, это немного странно.
0 urzatron work/sunrise % rails dbconsole
SQLite version 3.7.5
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> select * from invitations;
1||1|dean@example.net|email|1|2011-11-07 02:50:10.818984|41a673223a2b059b212ca3753896d3fd38e1d1dd
sqlite> select * from invitations where token = "41a673223a2b059b212ca3753896d3fd38e1d1dd";
sqlite>
Вот миграция для любопытных.
class CreateInvitations < ActiveRecord::Migration
def change
create_table :invitations do |t|
t.datetime :accepted_at
t.references :assignment
t.string :contact, :null => false
t.string :network, :null => false
t.references :sender, :null => false
t.datetime :sent_at
t.string :token, :null => false
end
add_index :invitations, :accepted_at
add_index :invitations, [:network,:token]
add_index :invitations, :token
add_column :users, :invitation_id, :integer
end
end