ruby on rails - Join tables and foreign keys -
ruby on rails - Join tables and foreign keys -
i'm getting rather confused foreign keys in bring together table. i'm trying build bring together table links user , guideline models form favoriteguideline table (i.e. user can pick favorite guideline).
my error is:
'expected favoriteguideline have belongs_to association called favorite (favoriteguideline not have favorite_id foreign key)'
my favorite_guideline.rb is
class favoriteguideline < activerecord::base belongs_to :user belongs_to :guideline belongs_to :favorite, class_name: 'user', foreign_key: 'favorite_id' attr_accessible :user, :favorite, :guideline end
and favorite_guideline_test.rb is
require 'test_helper' class favoriteguidelinetest < activesupport::testcase should belong_to(:user) should belong_to(:favorite) test "that creating favorite works without raising exception" assert_nothing_raised favoriteguideline.create user: users(:eve), guideline: guidelines(:three) end end end
and database migration is
class createfavoriteguidelines < activerecord::migration def alter create_table :favorite_guidelines |t| t.integer :user_id t.integer :favorite_id t.integer :guideline_id t.timestamps end add_index :favorite_guidelines, [:user_id] add_index :favorite_guidelines, [:favorite_id] add_index :favorite_guidelines, [:guideline_id] end end
if understand correctly, favoriteguideline meant association table. favorite alias favoriteguideline.
so model should be:
class favoriteguideline < activerecord::base set_primary_key 'favorite_id' belongs_to :user belongs_to :guideline attr_accessible :user, :favorite, :guideline end
and test should have line
should belong_to(:guideline)
instead of
should belong_to(:favorite)
and migration should have favorite_id primary key:
def alter create_table :favorite_guidelines, :primary_key => :favorite_id |t| t.integer :user_id t.integer :guideline_id t.timestamps end
then need finish defining association has_many
in user.rb
, guideline.rb
ruby-on-rails ruby-on-rails-3
Comments
Post a Comment