如何将简单的ruby flashcard程序转换为ROR应用程序?

时间:2010-05-11 16:54:13

标签: ruby-on-rails ruby

我要做的是在轨道上制作一个基本的flashcard应用程序。此时,我正在寻找的是迭代一系列抽认卡的功能,对用户进行测验并让用户知道他们是否正确。在红宝石中,我写作并不需要花很长时间:

class Card
  attr_accessor :answer, :question
  def initialize(answer = "", question="")
    @answer = answer
    @question = question
  end

  def quiz
    puts "What does #@question mean?"
    answer = gets.chomp
    if answer == @answer
      puts "Right"
      return true
    else
      puts "Wrong"
      return answer
    end
  end
end

class Cardlist
  attr_accessor :Cards
  def initialize(Cards = [])
    @Cards = Cards
  end
  def quiz
    Cards.each do |w|
      w.quiz
    end
  end  
end

我在使用rails时遇到的问题是找出将逻辑循环到列表中所有卡的位置。我制作了这两个模型:

class Card < ActiveRecord::Base
  belongs_to :cardlist
end

class Cardlist < ActiveRecord::Base
  has_many :cards
end

我知道应用程序逻辑应该进入控制器,但如果我要为我的Cardlist控制器进行“测验”操作,我将如何让它遍历所有卡?在生成每个“测验”页面后,我需要从用户那里得到答案,回复(可能是闪存)是否正确,然后继续下一个问题。是否有任何逻辑必须进入视图以确保它将用户输入的答案发送回控制器?如何在不将数据写入数据库的情况下将信息发送回控制器?

1 个答案:

答案 0 :(得分:2)

IMO,当用户启动测验时,CardList实例被初始化并存储在会话中(您还可以为用户提供重启选项,这将是现有/另一个控制器上的另一种方法)。因此,CardList将坐在用户的会话中,并且您将在每个测验中给予他们另一个Card

因此,如果您愿意,您的“每个”方法会在网络点击之间进行划分。

因此,您的视图会向用户显示Card,用户会在控制器上回答并点击该方法,然后将其移至下一个Card并再次显示该视图。使用flash变量是向用户提供有关前一次提交的反馈的好方法。

正如您所做的那样,您的卡通常是ActiveRecord模型。您也将CardList设为ActiveRecord模型,这是一个很好的方法。

请注意,您可能希望对quizquiz(例如QuizSet?)使用一些不同的术语,以使事情更加清晰。