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'
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
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