Я пытаюсь использовать этот шестигранный пакет: https://github.com/meh/amnesiaЭликсир + Амнезия: как читать атрибут?
Вот моя схема:
use Amnesia
require Logger
require IEx
defdatabase Database do
deftable User, [{ :id, autoincrement }, :device_identifier, :match_history], type: :ordered_set, indices: [:device_identifier] do
@type t :: %User{ id: non_neg_integer, device_identifier: String.t, match_history: List.t }
...
end
end
и вот где происходит ошибка:
Amnesia.transaction do
// IEx.pry
queue = User.where(:device_identifier != device_identifier)
if queue do
Logger.info "dequeuing another user"
matched_user = List.first(queue.values)
matched_user |> User.delete
push socket, "match_found", %{ device_identifier: matched_user.device_identifier }
else
Logger.info "queuing user"
push socket, "queued", %{}
end
end
Когда я пытаюсь вызвать matched_user.device_identifier
, это выходит из строя. Но разве это не атрибут модели? В README в реестре github он вызывает content
в модели Message, поэтому почему я не могу сделать то же самое с device_identifier
на моей модели пользователя?
Я даже попробовал с id
поля:
pry(8)> matched_user.id
** (UndefinedFunctionError) function Database.User.id/1 is undefined or private. Did you mean one of:
* id/0
Есть ли способ, чтобы выяснить, какие методы моего объект matched_user отвечает?
Вы можете попробовать напечатать значение 'matched_user', прежде чем выполнить' matched_user.id'? – Dogbert
@Dogbert yeh Я получаю это: '{Database.User, 2," 5pyia9cej4 ", nil}' – Edmund