Rails3.2でHABTM(Has And Belongs To Many)を実装しました。

prefectures,schoolsがそれぞれHABTMの関係になっており、

中間テーブルがhbtmsとなっております。

prefecture.rb

class Prefecture < ActiveRecord::Base
  attr_accessible :name

  has_many :hbtms, :foreign_key => :prefecture_id
  has_many :schools, :through => :hbtms
end

school.rb

class School < ActiveRecord::Base
  attr_accessible :name

  has_many :hbtms, :foreign_key => :school_id
  has_many :prefectures, :through => :hbtms, :order => "hbtms.position"
end

hbtm.rb

class Hbtm < ActiveRecord::Base
  attr_accessible :school_id, :prefecture_id, :position

  belongs_to :school
  belongs_to :prefecture
end

migration(hbtmのみ 他を載せると多くなるので)

class CreateHbtms < ActiveRecord::Migration
  def change
    create_table :hbtms, id: false  do |t|

      t.references :prefecture, index: true, null: false
      t.references :school, index: true, null: false
      t.integer    :position


      t.timestamps
    end
  end
end

質問1

中間テーブルにレコードを追加(多対多のレコード)するときは

Prefecture.find(1).schools << School.find(2)

このように実行しております。

これ以外に値を追加する方法はないでしょうか?

質問2

hbtmテーブルはpositionカラムがあり、ソート順に使おうと思っております。

しかし、このレコードの追加方法ですとpositionに値を設定できません。

そこで、Hbtm.all.last.update_attributes(:position => 9)と後で変更する際、

このようにエラーが出力されます。

1.9.3-p551 :033 > Hbtm.all.last.update_attributes(:position => 9)
  Hbtm Load (21.3ms)  SELECT `hbtms`.* FROM `hbtms` 
   (1.1ms)  BEGIN
   (2.8ms)  UPDATE `hbtms` SET `position` = 9, `updated_at` = '2015-04-07 13:09:52' WHERE `hbtms`.`` IS NULL
Mysql2::Error: Unknown column 'hbtms.' in 'where clause': UPDATE `hbtms` SET `position` = 9, `updated_at` = '2015-04-07 13:09:52' WHERE `hbtms`.`` IS NULL
   (0.1ms)  ROLLBACK
ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'hbtms.' in 'where clause': UPDATE `hbtms` SET `position` = 9, `updated_at` = '2015-04-07 13:09:52' WHERE `hbtms`.`` IS NULL

なぜエラーとして扱われるのでしょうか?

質問3

また、Hbtm.lastを実行するとこのようなエラーが出力されます。

1.9.3-p551 :032 > Hbtm.last
  Hbtm Load (38.6ms)  SELECT `hbtms`.* FROM `hbtms` ORDER BY `hbtms`.`` DESC LIMIT 1
Mysql2::Error: Unknown column 'hbtms.' in 'order clause': SELECT  `hbtms`.* FROM `hbtms`  ORDER BY `hbtms`.`` DESC LIMIT 1

なぜエラーとして扱われるのでしょうか?