我基本上把一个应用程序放在一起做一个超级简单的问题=>回答测试,试图了解有关rails的更多信息。
即: 问题:“你的狗的名字是什么?” 答案:“Doggington”
我有一个带有两个简单属性的问题模型: 问题:字符串 correct_answer:字符串
我在这里的斗争是如何将REST主体应用于此 - 具体来说,当我检查用户的输入(回答)以查看他是否正确的问题时。
我不确定我是否应该做一些像修改“show”方法(或任何其他动作)来接受发布到它的答案的值......并且看起来像我应该在我的questions_controller中创建一个新方法称为“verify_answer”或类似的东西。
这打破了REST。
您怎么看?
谢谢!
答案 0 :(得分:5)
AnswersController#create
应接受答案。该控制器是否实际上具有相关的答案模型是无关紧要的。一个动作永远不会执行两个动作。例如,如果您的QuestionsController#show
同时显示问题,那么和会接受:put
或:post
以及问题的答案,那么您将破坏基本的rails设计原则
请注意,您的路线文件可能看起来像这样:
resources :questions do
resource :answer
end
这将揭示您可以发布的/ questions / 8 / answer路线:发布到,AnswersController#create
。
我忘了你可以用来生成网址的帮助网址方法的确切名称。类似于question_answer_path(@my_question)。
此路由文件适用于rails3,我认为这是您正在使用的内容,因为如果您在我看来开始使用新应用程序,则没有理由使用其他内容:p
如果您确实有Answer
模型(可能您希望存储用户的答案并稍后查看它们或汇总它们并提供统计信息等),那么您应该更改路由器以使用{{1而不是单数版本。
有关路由和一些RESTful技巧的更多信息,您应该访问Ruby on Rails指南,以获取此处的路由:http://guides.rubyonrails.org/routing.html
我正在编辑狂欢!有时您可能需要向Questions控制器添加一个非严格REST的附加方法。这不一定被认为是不好的做法,但只要确保你看看你的决定,并找出你是否实际上只是隐藏另一种资源的存在。我不认为这是上述时间之一:)