Исходя из длинной истории синтаксиса C-стиля и теперь пытаясь узнать Ruby (on Rails), у меня была своя доля проблем с ее идиомами и т. Д., Но сегодня я ударил я не ожидал, что у меня возникнут проблемы, и я не вижу ничего, что должно быть прямо перед моим лицом.Ошибка: попытка вызвать частный метод
У меня есть двоичный класс, который включает частный метод для получения значения URI из значения пути (uri и path являются атрибутами класса). Я звоню self.get_uri_from_path()
изнутри Binary.upload()
, но я получаю:
Attempt to call private method
Фрагмент модели выглядит следующим образом:
class Binary < ActiveRecord::Base
has_one :image
def upload(uploaded_file, save = false)
save_as = File.join(self.get_bin_root(), '_tmp', uploaded_file.original_path)
# write the file to a temporary directory
# set a few object properties
self.path = save_as.sub(Rails.root.to_s + '/', '')
self.uri = self.get_uri_from_path()
end
private
def get_uri_from_path
return self.path.sub('public', '')
end
end
Могу ли я сделать вызов неправильно? Я пропустил что-то еще, что еще более фундаментально? Единственное место, из которого вызывается Binary.get_uri_from_path()
, - на данный момент - Binary.upload()
. Я ожидал, что сможет вызвать частный метод из одного класса, если Ruby не делает что-то заметно отличное от других языков, которые я использовал.
Спасибо.
Спасибо. Немного больше копания помогли мне понять различия в частных методах Ruby и других языках. Я просто не ожидал различий на этом уровне. –
добро пожаловать. Это правда, это немного сложнее, но на самом деле это имеет смысл через некоторое время :) – marcgg
Я нахожу, что много Ruby потрясающее - лаконичное, но выразительное - но я определенно должен сражаться в дельтах идиомы. :-) –