From 5ef870b48c591836ba9ae3ec6dc06457d861f5d1 Mon Sep 17 00:00:00 2001 From: Xavier Shay Date: Mon, 7 Mar 2011 10:19:22 +1100 Subject: [PATCH] Interests --- app/helpers/form_helper.rb | 4 +++ app/models/interest.rb | 3 ++ app/models/interest_user.rb | 4 +++ app/models/user.rb | 3 ++ app/views/users/_form.html.erb | 9 ++++++ db/migrate/20110306221257_create_models.rb | 13 ++++++++ db/schema.rb | 35 ++++++++++++++++++++++ 7 files changed, 71 insertions(+) create mode 100644 app/models/interest.rb create mode 100644 app/models/interest_user.rb create mode 100644 db/schema.rb diff --git a/app/helpers/form_helper.rb b/app/helpers/form_helper.rb index 7e613ee..ebf2830 100644 --- a/app/helpers/form_helper.rb +++ b/app/helpers/form_helper.rb @@ -1,6 +1,10 @@ module FormHelper def setup_user(user) user.address ||= Address.new + (Interest.all - user.interests).each do |interest| + user.interest_users.build(:interest => interest) + end + user.interest_users.sort_by! {|x| x.interest.name } user end end diff --git a/app/models/interest.rb b/app/models/interest.rb new file mode 100644 index 0000000..e064991 --- /dev/null +++ b/app/models/interest.rb @@ -0,0 +1,3 @@ +class Interest < ActiveRecord::Base + validates_presence_of :name +end diff --git a/app/models/interest_user.rb b/app/models/interest_user.rb new file mode 100644 index 0000000..5f7d924 --- /dev/null +++ b/app/models/interest_user.rb @@ -0,0 +1,4 @@ +class InterestUser < ActiveRecord::Base + belongs_to :user + belongs_to :interest +end diff --git a/app/models/user.rb b/app/models/user.rb index 734be64..ce306ff 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,7 +1,10 @@ class User < ActiveRecord::Base has_one :address + has_many :interest_users + has_many :interests, :through => :interest_users accepts_nested_attributes_for :address + accepts_nested_attributes_for :interest_users, :allow_destroy => true validates_presence_of :email end diff --git a/app/views/users/_form.html.erb b/app/views/users/_form.html.erb index 64f61a5..bbf2e47 100644 --- a/app/views/users/_form.html.erb +++ b/app/views/users/_form.html.erb @@ -23,6 +23,15 @@ <% end %> + <%= f.fields_for :interest_users do |ff| %> +
+ <%= ff.hidden_field :id %> + <%= ff.hidden_field :interest_id %> + <%= ff.check_box :_destroy, {:checked => ff.object.persisted?}, '0', '1' %> + <%= ff.label :_destroy, ff.object.interest.name %> +
+ <% end %> +
<%= f.submit %>
diff --git a/db/migrate/20110306221257_create_models.rb b/db/migrate/20110306221257_create_models.rb index 06361f1..56d640d 100644 --- a/db/migrate/20110306221257_create_models.rb +++ b/db/migrate/20110306221257_create_models.rb @@ -11,6 +11,19 @@ def self.up t.string :city, :null => false end + + create_table :interests do |t| + t.string :name, :null => false + end + + ["Door Knocking", "Presenting", "Admin"].each do |x| + Interest.create!(:name => x) + end + + create_table :interest_users do |t| + t.references :user + t.references :interest + end end def self.down diff --git a/db/schema.rb b/db/schema.rb new file mode 100644 index 0000000..75c0888 --- /dev/null +++ b/db/schema.rb @@ -0,0 +1,35 @@ +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. +# +# Note that this schema.rb definition is the authoritative source for your +# database schema. If you need to create the application database on another +# system, you should be using db:schema:load, not running all the migrations +# from scratch. The latter is a flawed and unsustainable approach (the more migrations +# you'll amass, the slower it'll run and the greater likelihood for issues). +# +# It's strongly recommended to check this file into your version control system. + +ActiveRecord::Schema.define(:version => 20110306221257) do + + create_table "addresses", :force => true do |t| + t.integer "user_id" + t.string "city", :null => false + end + + create_table "interest_users", :force => true do |t| + t.integer "user_id" + t.integer "interest_id" + end + + create_table "interests", :force => true do |t| + t.string "name", :null => false + end + + create_table "users", :force => true do |t| + t.string "email", :null => false + t.datetime "created_at" + t.datetime "updated_at" + end + +end