我是Rails的新手,正在通过一些书籍工作,编写小型测试项目。我最新的开发应用程序是一个问答程序。这个想法是有一个数据库表充满了问题。用户将调出Web应用程序并显示第一个问题。用户在表单中输入答案,如果答案正确,他会得到下一个问题。很简单。Rails - 这段代码应该在哪里遵守MVC设计?
所以,我用生成的脚手架来创建问题表和用户表。这很好 - 我可以导航到系统生成的视图来添加/编辑/删除问题和用户。
然后我创建了一个名为gateway的新控制器。我做了这个我的根控制器,并给它一个索引方法。索引方法将用户标识作为URL参数提取并为用户提取适当的问题。然后它加载一个显示问题的视图,并具有用户输入答案的表单。
我现在正在编程逻辑来测试答案 - 我在网关控制器中使用名为“test_answer”的新方法执行此操作,但我觉得现在正在打破MVC设计,因为此代码不是直接关系到显示视图。我有点困惑,应该在哪里放这样的代码(方法测试答案,如果正确递增用户的级别,如果错误重定向到错误页面)
它应该在现有模型(用户或问题)?它应该留在网关控制器中吗?我应该在/ lib中创建一个新文件吗?
我得到的MVC(视图中显示的信息,模型存储和处理数据,控制器处理好两者之间的相互作用)的一般概念,但是我不知道这些代码如何适用。
谢谢!
作为参考,这里是我目前的gateway.rb控制器 - 请选择它!我敢肯定,有许多在那里可疑位...
class GatewayController < ApplicationController
def index
if params[:uid]
@user = User.where(:uid => params[:uid]).first
else
@user = User.where(:uid => "000").first
end
@question = Question.where(:question_number => @user.current_level).first
session[:uid] = @user.uid
session[:answer] = @question.answer_text
end
# POST /gateway/answer
# POST /gateway/answer.xml
def answer
#below is code I feel shouldn't be here...the logic to test the answer and then increment user's level
if (params[:user_answer]) == session[:answer]
@user = User.where(:uid => session[:uid]).first
@user.increment!(:current_level)
respond_to do |format|
#code here will redirect to "Correct answer" page
end
else
respond_to do |format|
#code here will redirect to "Wrong answer" page
end
end
end
end
哪种模式?我有一个用户和一个问题。 test_answer涉及测试与问题数据,但更改(递增)用户数据。好奇听到你的想法,谢谢! – Jim 2011-04-05 18:26:49
我把它放在你的问题模型中,你可以通过调用belongs_to关系来访问用户(假设你有一个belongs_to)。 – 2011-04-05 18:28:46
@user我会把它放在两个,用户模型可能有像'answer_question(问题,答案)'和问题模型可能有'答案(答案)' – Vadim 2011-04-05 18:31:46