Как получить доступ к свойству массива в Ruby - PullRequest
1 голос
/ 02 февраля 2010

У меня есть этот объект класса Array

    >> answers_to_problem
=> [#<Answer id: 807, problem_id: 1, player_id: 53, code: "function y = times2(x
)\r\n  y = 2*x;\r\nend", message: nil, score: 12, output: nil, hide: nil, create
d_at: "2010-02-02 11:06:49", updated_at: "2010-02-02 11:06:49", correct_answer:
nil, leader: nil, success: true, cloned_from: nil>]

Для выполнения бинарной проверки мне нужен доступ к полю success . Я не уверен, что здесь даже используется правильная терминология, поэтому я не могу найти, как получить к ней доступ.

answer_to_problems был найден следующим образом:

answers_to_problem = Answer.find_all_by_problem_id_and_player_id(current_problem,player_id)

В конечном счете, я хочу сделать эту проверку:

is_correct = (answers_to_problem.success == true) 

Ответы [ 3 ]

3 голосов
/ 02 февраля 2010

Это не свойство массива - это свойство объекта в массива.Таким образом, вы должны answers_to_problem[0].success получить доступ к атрибуту success первого объекта массива.

2 голосов
/ 03 февраля 2010

Немного вне вопроса здесь, но:

is_correct = (answer_to_problem.success == true)

Здесь вы делаете задание и проверку правды, которые на самом деле не нужны. is_correct здесь просто отражает то, что answer_to_problem.success будет. Сократить:

answer_to_problem.success == true

Теперь вы продолжаете сравнение, чтобы получить логическое значение, которое у вас уже есть. Сократить:

answer_to_problem.success

Есть утверждение, которое вы можете использовать так же, как и is_correct. Чтобы сделать его еще лучше, вы можете сделать:

class Answer
  def correct?
    success
  end
end

И просто используйте answer_to_problem.correct?

2 голосов
/ 02 февраля 2010

Вы уверены, что хотите использовать find_all?Если вы знаете, что получите только один ответ, вы должны использовать поиск без всего.Таким образом, вы получаете один объект ответа вместо массива.

Если вы можете получить более одного ответа, хотите ли вы проверить, все ли ответы успешны или только один из них?*

Вы можете сделать первое с помощью: answers.all?(&:success), а второе с answers.any?(&:success).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...