Try also setting the primary key:
class FeatureAttribute < ActiveRecord::Base set_table_name 'feature_attribute' set_primary_key 'feature_id' belongs_to :feature end
UPDATE
I think your problem lies elsewhere. I just tested and ActiveRecords works fine with tables without a primary key:
For a simple table:
class CreateThings < ActiveRecord::Migration def change create_table :things, :id => false do |t| t.string :name t.timestamps end end end
in console:
Loading development environment (Rails 3.1.1) irb(main):001:0> Thing.create(:name=>'A name for the thing') (0.1ms) BEGIN SQL (0.3ms) INSERT INTO `things` (`created_at`, `name`, `updated_at`) VALUES ('2011-11-02 16:33:48', 'A name for the thing', '2011-11-02 16:33:48') (40.3ms) COMMIT => #<Thing name: "A name for the thing", created_at: "2011-11-02 16:33:48", updated_at: "2011-11-02 16:33:48"> irb(main):002:0> Thing.first Thing Load (0.7ms) SELECT `things`.* FROM `things` LIMIT 1 => #<Thing name: "A name for the thing", created_at: "2011-11-02 16:33:48", updated_at: "2011-11-02 16:33:48"> irb(main):003:0>
UPDATE 2 Not very good:
irb(main):003:0> Thing.create(:name=>'Another thing') (0.2ms) BEGIN SQL (0.4ms) INSERT INTO `things` (`created_at`, `name`, `updated_at`) VALUES ('2011-11-02 16:40:59', 'Another thing', '2011-11-02 16:40:59') (35.4ms) COMMIT => #<Thing name: "Another thing", created_at: "2011-11-02 16:40:59", updated_at: "2011-11-02 16:40:59"> irb(main):004:0> Thing.first Thing Load (0.5ms) SELECT `things`.* FROM `things` LIMIT 1 => #<Thing name: "A name for the thing", created_at: "2011-11-02 16:33:48", updated_at: "2011-11-02 16:33:48"> irb(main):005:0> Thing.last Thing Load (11.8ms) SELECT `things`.* FROM `things` ORDER BY `things`.`` DESC LIMIT 1 Mysql2::Error: Unknown column 'things.' in 'order clause': SELECT `things`.* FROM `things` ORDER BY `things`.`` DESC LIMIT 1 ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'things.' in 'order clause': SELECT `things`.* FROM `things` ORDER BY `things`.`` DESC LIMIT 1
source share