3 ms·
I'm interested - where did you learn that ActiveRecord does not require IDs? The only case where I can think of where it doesn't require IDs is when building a
by rahoulb 15y ago
I'm interested - where did you learn that ActiveRecord does not require IDs?
The only case where I can think of where it doesn't require IDs is when building a join table (for a many-to-many relationship).
In every other case, you need to specify a primary key field (although it does not need to be an auto-incrementing integer called "id") and I'm sure it says as much in the docs.
EDIT: You can do a select and omit the ID field in the resultset, but you cannot save the results back again - simply because it does not know where to write it back. Again, I'm pretty sure I remember reading that in the docs, but I may have imagined it.
- trebor 15y agohttp://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-create_table http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAd... create_table(:categories_suppliers, :id => false) do |t| t.column :category_id, :integer t.column :supplier_id, :integer end I did this and indexed the table by date, and it works for everything except saving a record. Like I said, an ID/primary key is required though that section of the documentation implies that an ID is optional.
- rahoulb 15y agoHmm - yeah the docs are sort of unclear, if you're not familiar with the convention. :categories_suppliers implies that the table is a join table (a many-to-many join between categories and suppliers) - which is why it has no ID and why it only has the two foreign key fields with no other data.
- trebor 15y agoYet the assumption that all models require an ID is a fallacy. I was generating reports unique to the day, therefore a simple Date field was adequate as an index/ID. I don't know about other ORMs but when working directly with the SQL it'd be no issue. I hold out that it's a problem in the design of ActiveRecord to assume that there will always be a primary key. That said, if I can just tell the model "identify yourself by this key" WITHOUT setting it as the primary key I would be happy.