From de85a6dcced4ebdf0b32715f4aea84337a8b7e0a Mon Sep 17 00:00:00 2001 From: gnattery Date: Wed, 13 Feb 2013 15:17:40 +1100 Subject: [PATCH] added associations between forums, posts, and members --- app/models/forum.rb | 2 ++ app/models/member.rb | 1 + app/models/post.rb | 1 + db/migrate/20130213015708_add_forum_to_posts.rb | 5 +++++ db/schema.rb | 3 ++- spec/factories/forums.rb | 6 +++--- spec/factories/post.rb | 4 ++++ spec/models/forum_spec.rb | 14 +++++++++++++- spec/models/member_spec.rb | 7 +++++++ spec/models/post_spec.rb | 5 +++++ 10 files changed, 43 insertions(+), 5 deletions(-) create mode 100644 db/migrate/20130213015708_add_forum_to_posts.rb diff --git a/app/models/forum.rb b/app/models/forum.rb index 822098801..c9a438ce7 100644 --- a/app/models/forum.rb +++ b/app/models/forum.rb @@ -1,3 +1,5 @@ class Forum < ActiveRecord::Base attr_accessible :description, :name, :owner_id + has_many :posts + belongs_to :owner, :class_name => "Member" end diff --git a/app/models/member.rb b/app/models/member.rb index a56dd7e88..436288e3a 100644 --- a/app/models/member.rb +++ b/app/models/member.rb @@ -5,6 +5,7 @@ class Member < ActiveRecord::Base has_many :posts, :foreign_key => 'author_id' has_many :comments, :foreign_key => 'author_id' has_many :gardens, :foreign_key => 'owner_id' + has_many :forums, :foreign_key => 'owner_id' # Include default devise modules. Others available are: # :token_authenticatable, :confirmable, diff --git a/app/models/post.rb b/app/models/post.rb index e38920623..050f13c26 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -3,6 +3,7 @@ class Post < ActiveRecord::Base friendly_id :author_date_subject, use: :slugged attr_accessible :body, :subject, :author_id belongs_to :author, :class_name => 'Member' + belongs_to :forum has_many :comments, :dependent => :destroy default_scope order("created_at desc") diff --git a/db/migrate/20130213015708_add_forum_to_posts.rb b/db/migrate/20130213015708_add_forum_to_posts.rb new file mode 100644 index 000000000..904183f90 --- /dev/null +++ b/db/migrate/20130213015708_add_forum_to_posts.rb @@ -0,0 +1,5 @@ +class AddForumToPosts < ActiveRecord::Migration + def change + add_column :posts, :forum_id, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index 4b8ae4410..55fa11bd6 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20130213014511) do +ActiveRecord::Schema.define(:version => 20130213015708) do create_table "comments", :force => true do |t| t.integer "post_id", :limit => 255, :null => false @@ -107,6 +107,7 @@ ActiveRecord::Schema.define(:version => 20130213014511) do t.datetime "created_at", :null => false t.datetime "updated_at", :null => false t.string "slug" + t.integer "forum_id" end add_index "posts", ["created_at", "author_id"], :name => "index_updates_on_created_at_and_user_id" diff --git a/spec/factories/forums.rb b/spec/factories/forums.rb index 5bc68e5bb..0d8cff596 100644 --- a/spec/factories/forums.rb +++ b/spec/factories/forums.rb @@ -2,8 +2,8 @@ FactoryGirl.define do factory :forum do - name "MyString" - description "MyText" - owner_id 1 + name "Permaculture" + description "*Everything* about permaculture!" + owner end end diff --git a/spec/factories/post.rb b/spec/factories/post.rb index 0f056691e..d9e6e0be5 100644 --- a/spec/factories/post.rb +++ b/spec/factories/post.rb @@ -15,6 +15,10 @@ FactoryGirl.define do factory :html_post do body 'EVIL' end + + factory :forum_post do + forum + end end end diff --git a/spec/models/forum_spec.rb b/spec/models/forum_spec.rb index a20746c9b..b9d09a707 100644 --- a/spec/models/forum_spec.rb +++ b/spec/models/forum_spec.rb @@ -1,5 +1,17 @@ require 'spec_helper' describe Forum do - pending "add some examples to (or delete) #{__FILE__}" + before(:each) do + @forum = FactoryGirl.create(:forum) + end + + it "belongs to an owner" do + @forum.owner.should be_an_instance_of Member + end + + it "has many posts" do + @post1 = FactoryGirl.create(:forum_post, :forum => @forum) + @post2 = FactoryGirl.create(:forum_post, :forum => @forum) + @forum.posts.length.should == 2 + end end diff --git a/spec/models/member_spec.rb b/spec/models/member_spec.rb index 586e37abd..1f2f8ea41 100644 --- a/spec/models/member_spec.rb +++ b/spec/models/member_spec.rb @@ -56,6 +56,13 @@ describe 'member' do @member.comments.length.should == 2 end + it "has many forums" do + @member.save + @forum1 = FactoryGirl.create(:forum, :owner => @member) + @forum2 = FactoryGirl.create(:forum, :owner => @member) + @member.forums.length.should == 2 + end + it 'has location and lat/long fields' do @member.update_attributes(:location => 'Greenwich, UK') @member.location.should eq 'Greenwich, UK' diff --git a/spec/models/post_spec.rb b/spec/models/post_spec.rb index 784bad0d3..5ce6c158a 100644 --- a/spec/models/post_spec.rb +++ b/spec/models/post_spec.rb @@ -37,4 +37,9 @@ describe Post do @post.destroy Comment.count.should == all - 2 end + + it "belongs to a forum" do + @post = FactoryGirl.create(:forum_post) + @post.forum.should be_an_instance_of Forum + end end