Go back to using user_id+k as the primary key for user preferences but
authorTom Hughes <tom@compton.nu>
Sun, 4 May 2008 11:18:38 +0000 (11:18 +0000)
committerTom Hughes <tom@compton.nu>
Sun, 4 May 2008 11:18:38 +0000 (11:18 +0000)
actually using the composite primary key extension this time so that it
really works.

Also stop update_one tring to render a non-existent view, and add a
delete_one method to allow preferences to be deleted.

app/controllers/user_preference_controller.rb
app/models/user_preference.rb
config/routes.rb
db/migrate/012_add_user_preference_id.rb [deleted file]

index a4de5c0..5594799 100644 (file)
@@ -3,7 +3,7 @@ class UserPreferenceController < ApplicationController
   before_filter :authorize
 
   def read_one
-    pref = UserPreference.find(:first, :conditions => ['user_id = ? AND k = ?', @user.id, params[:preference_key]])
+    pref = UserPreference.find(@user.id, params[:preference_key])
 
     if pref
       render :text => pref.v.to_s
@@ -13,20 +13,26 @@ class UserPreferenceController < ApplicationController
   end
 
   def update_one
-    pref = UserPreference.find(:first, :conditions => ['user_id = ? AND k = ?', @user.id, params[:preference_key]])
-  
-    if pref
+    begin
+      pref = UserPreference.find(@user.id, params[:preference_key])
       pref.v = request.raw_post.chomp
       pref.save
-    else
+    rescue ActiveRecord::RecordNotFound 
       pref = UserPreference.new
       pref.user = @user
       pref.k = params[:preference_key]
       pref.v = request.raw_post.chomp
       pref.save
     end
+
+    render :nothing => true
   end
 
+  def delete_one
+    UserPreference.delete(@user.id, params[:preference_key])
+
+    render :nothing => true
+  end
 
   # print out all the preferences as a big xml block
   def read
@@ -91,5 +97,4 @@ class UserPreferenceController < ApplicationController
 
     render :nothing => true
   end
-
 end
index 2a73f22..3985a52 100644 (file)
@@ -1,4 +1,5 @@
 class UserPreference < ActiveRecord::Base
+  set_primary_keys :user_id, :k
   belongs_to :user
 
   # Turn this Node in to an XML Node without the <osm> wrapper.
index 2ac48cc..06f1583 100644 (file)
@@ -45,6 +45,7 @@ ActionController::Routing::Routes.draw do |map|
   map.connect "api/#{API_VERSION}/user/preferences/:preference_key", :controller => 'user_preference', :action => 'read_one', :conditions => { :method => :get }
   map.connect "api/#{API_VERSION}/user/preferences", :controller => 'user_preference', :action => 'update', :conditions => { :method => :put }
   map.connect "api/#{API_VERSION}/user/preferences/:preference_key", :controller => 'user_preference', :action => 'update_one', :conditions => { :method => :put }
+  map.connect "api/#{API_VERSION}/user/preferences/:preference_key", :controller => 'user_preference', :action => 'delete_one', :conditions => { :method => :delete }
   map.connect "api/#{API_VERSION}/user/gpx_files", :controller => 'user', :action => 'api_gpx_files'
  
   map.connect "api/#{API_VERSION}/gpx/create", :controller => 'trace', :action => 'api_create'
diff --git a/db/migrate/012_add_user_preference_id.rb b/db/migrate/012_add_user_preference_id.rb
deleted file mode 100644 (file)
index e644e87..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-class AddUserPreferenceId < ActiveRecord::Migration
-  def self.up
-    remove_primary_key 'user_preferences'
-    add_column "user_preferences", "id", :bigint, :limit => 64, :null => false
-    add_primary_key "user_preferences", ["id"]
-    change_column "user_preferences", "id", :bigint, :limit => 64, :null => false, :options => "AUTO_INCREMENT"
-    add_index "user_preferences", ["id"], :name => "user_preferences_id_idx"
-  end
-
-  def self.down
-    remove_index 'user_preferences', 'id'
-    remove_column 'user_preferences', 'id'
-  end
-end