私は最初の Ruby on Rails プログラムを書いています。これは、大学でのコースの管理/編成、コースに参加する学生、および各コースに属するモジュールを支援するアプリケーションです。
私は現在、2 つのクラスを持っています。最初の Application と呼ばれるクラスは、ユーザーとのインターフェイスに使用しているもので、次のようになります。
class Application
# To change this template use File | Settings | File Templates.
require './courseModules.rb'
def initialize
mainMenu
end
=begin
def navigateTo(what)
what.new(v).display
mainMenu
end
=end
def mainMenu
puts "What would you like to do?
1: Add module to a scheme
2: Remove module from a scheme
3: Query modules
4: Modify module
5: Register a student on a scheme
6: Remove a student from a scheme
7: Register a student on a module
8: Remove a student from a module"
case gets.strip
when "1"
CourseModules.addModuleToScheme
when "2"
CourseModules.removeModuleFromScheme
when "3"
navigateTo CourseModules
when "4"
navigateTo CourseModules
when "5"
navigateTo Student
when "6"
navigateTo Student
when "7"
navigateTo Student
end
end
Application.new
end
2 つ目は courseModules と呼ばれ、ユーザーが新しいコースを追加したり、それらのコースにモジュールを追加したりできるようにするために使用します。このクラスは現在、次のようになっています。
class CourseModules
# To change this template use File | Settings | File Templates.
@@moduleScheme = nil
@@moduleYear = nil
#@moduleTitle = ""
@noOfModulesInScheme = 0
def self.moduleYear
@@moduleYear
end
def initialize(v)
@val = v
end
# Set and get the @val object value
def set (v)
@val = v
end
def get
return @val
end
def addModule
moduleName = Module.new(30)
moduleRefNo = Random(100)
#moduleTitle = @moduleTitle
moduleYear(4)
print "What is the name of the module you would like to add?"
moduleName = gets
moduleRefNo
printf "Which year does the module belong to?"
@@moduleYear = gets
puts "#{moduleName}, belonging to #{@@moduleYear} has been added to the system, with reference number #{moduleRefNo}."
navigateTo Application
end
def addModuleToScheme
# Create an empty hash for the schemes
schemes = Hash.new()
# Allow user to enter scheme names into a set of variables, and use each scheme name as a hash/ array of modules.
# Then allow the user to enter the the modules for each scheme into each of the hashes
# Create specific hash elements by using the following line:
schemes = {:scheme1 => scheme1variable, :scheme2 => scheme2variable}
puts "What is the name of the scheme that you would like to add a module to? "
schemeName = gets
# Need to use an if statement here to check whether or not the scheme already exists, if it doesn't, create it, if it does,
# tell the user that it does.
if schemes.has_key?(schemeName)
puts "This scheme has already been added "
else
schemes.add(schemeName)
end
noOfModulesInScheme + 1
moduleName.moduleScheme = schemeName
end
def removeModuleFromScheme
moduleName.moduleScheme = nil
end
def queryModule
end
end
現在、メニューの最初のオプションである「モジュールをスキームに追加」に取り組んでいます。Application.rb クラスからプログラムを実行しようとすると、メニューが表示され、選択したいオプションである「1」と入力します。
ただし、メソッド「addModuleToScheme」が未定義であるというエラーが表示されます。「addModuleToScheme」メソッドで私が間違っていることを誰かが指摘できますか?
どうもありがとう。
2012 年 8 月 21 日 00:35 に編集
OK、これで addModuleToScheme メソッドは解決したようですが、実際にスキーム名をハッシュに追加しようとするとエラーが発生します。
ここでメニューから「1」を選択すると、スキームの名前を尋ねられますが、それを入力すると、未定義のメソッド エラーが発生します。
undefined method 'add' for {}:Hash (NoMethodError)"
ライン上
schemes.add(schemeName)
私のif elseステートメントで。ここで私が間違っていることはありますか?