2013-06-16 16 views
6

Ich habe von 3.2.2 auf rails4 aktualisiert und bekomme nun diese undefinierte Methode von meiner Rabl-Vorlage, die ich vor dem Upgrade nicht bekommen habe. Der "tooth" -Parameter für Prozeduren wird von einer Getter/Setter-Methode gesetzt, die in der Postgres-Datenbank als Hstore-Hash namens properties gespeichert wird. Nicht sicher, was sich in rails4 geändert hat, um dies zu ermöglichen! Jede Hilfe würde sehr geschätzt werden.undefined methode `scan 'für {" tooth "=>" "}: Hash

ERROR:

Showing /home/action/app/views/procedures/chart.json.rabl where line #1 raised: 

undefined method `scan' for {"tooth"=>""}:Hash 
Extracted source (around line #1): 
1 object @procedures 
2 attributes :buccal, :mesial, :occlusal, :distal, :lingual 

Trace of template inclusion: app/views/procedures/_procedures_table.html.erb, app/views/procedures/chart.html.erb 

Procedures Modell (Getter und Setter-Methode für: tooth)

%w[tooth buccal mesial occlusal distal lingual].each do |key| 
    attr_accessible key 
    scope "has_#{key}", lambda { |value| where("properties @> (? => ?)", key, value) } 

    define_method(key) do 
     properties && properties[key] 
    end 

    define_method("#{key}=") do |value| 
     self.properties = (properties || {}).merge(key => value) 
    end 
end 

Gemfile:

source 'http://rubygems.org' 

gem 'rails', '4.0.0.rc2' 

# Bundle edge Rails instead: 
# gem 'rails',  :git => 'git://github.com/rails/rails.git' 

gem 'pg' 
gem "paperclip", "~> 3.0" 
gem 'rabl' 
gem 'activerecord-postgres-hstore' 
gem "bugsnag" 
gem 'country_select' 

gem 'bullet', group: :development 

# Asset template engines 
gem 'sass-rails', '~> 4.0.0.rc1' 
gem 'coffee-rails', '~> 4.0.0.rc1' 
gem 'uglifier', '>= 1.3.0' 
gem 'twitter-bootstrap-rails' 
gem 'therubyracer', :platform => :ruby 
gem 'less-rails' 
gem 'jquery-ui-rails' 

gem 'jquery-rails' 

# Use unicorn as the web server 
# gem 'unicorn' 

# Deploy with Capistrano 
# gem 'capistrano' 

# To use debugger 
# gem 'ruby-debug19', :require => 'ruby-debug' 


# Declarative Authorization 
gem 'declarative_authorization' 
gem 'protected_attributes' 

# Authlogic 
gem 'authlogic' 

gem 'simple_form', '3.0.0.rc' 

group :production do 

end 

group :test do 
    # Pretty printed test output 
    gem 'turn', :require => false 
end 
gem 'rubber' 
gem 'open4' 
gem 'gelf' 
gem 'graylog2_exceptions', :git => 'git://github.com/wr0ngway/graylog2_exceptions.git' 
gem 'graylog2-resque' 
+0

Die Antwort gefunden !! Rails 4 hat jetzt native Unterstützung für Hstore, was großartig ist, aber ich hatte es nicht bemerkt. Um mein Problem zu beheben, folgte ich nur dieser Anleitung unten, die großartig ist, mein Modell mit Hstore einzurichten und löschte dann meine Getter/Setter-Methoden. http://blog.remarkablelabs.com/2012/12/a-love-affair-with-postgresql-rails-4-countdown-to-2013 – mattclar

+0

Nur für den Fall, migriere ich meine App auf Rails 4 Rc2 und ich hatten das gleiche Problem mit 'scan', aber ich musste nur die serialize-Methode aus dem Modell entfernen :-). serialisieren: Daten, ActiveRecord :: Coders :: Hstore – joselo

Antwort

Verwandte Themen