2013-06-16 5 views
6

Я обновил до rails4 из 3.2.2, и теперь я получил этот неопределенный метод из моего шаблона rabl, который id не получил до обновления. Параметр «tooth» на процедурах - это набор методом геттера/сеттера, который хранится в базе данных postgres как хэш-хэш, называемый свойствами. Не уверен, что изменилось в rails4, чтобы это произошло! Любая помощь будет высоко оценена.undefined метод `scan 'для {" tooth "=>" "}: Hash

ОШИБКА:

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 

Процедуры модель (геттер и сеттер метод: зуб)

%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

Нашел ответ !! Rails 4 теперь имеет встроенную поддержку Hstore, которая потрясающая, но я не понял. Чтобы исправить мою проблему, я просто следил за этим руководством, которое отлично подходит для настройки моей модели с помощью hstore, а затем удалило методы getter/setter. http://blog.remarkablelabs.com/2012/12/a-love-affair-with-postgresql-rails-4-countdown-to-2013 – mattclar

+0

На всякий случай, я переношу свое приложение в Rails 4 У Rc2 и I была та же проблема, связанная с «проверкой», но мне пришлось удалить метод сериализации из модели :-). serialize: данные, ActiveRecord :: Coders :: Hstore – joselo

ответ

5

Найдено ответ !! Rails 4 теперь имеет встроенную поддержку Hstore, которая потрясающая, но я не понял. Чтобы исправить мою проблему, я просто следил за этим руководством, которое отлично подходит для настройки моей модели с помощью hstore, а затем удалило мои методы getter/setter. http://blog.remarkablelabs.com/2012/12/a-love-affair-with-postgresql-rails-4-countdown-to-2013

Смежные вопросы