如何坚持使用REST?

Mar*_*tto 1 ruby rest controller ruby-on-rails crud

我基本上把一个应用程序放在一起做一个超级简单的问题=>回答测试,试图了解有关rails的更多信息.

即:问题:"你的狗叫什么名字?" 答案:"Doggington"

我有一个带有两个简单属性的Question模型:question:string correct_answer:string

我在这里的斗争是如何将REST主体应用于此 - 具体来说,当我检查用户的输入(回答)以查看他是否正确的问题时.

我不确定我是否应该做一些像修改"show"方法(或任何其他动作)来接受发布到它的答案的值......并且看起来像我应该在我的questions_controller中创建一个名为"verify_answer"的新方法" 或类似的规定.

这打破了REST.

你怎么看?

谢谢!

nzi*_*nab 5

AnswersController#create应该接受答案.该控制器是否实际上具有相关的答案模型是无关紧要的.一个动作永远不应该执行两个动作.例如,如果您的QuestionsController#show两个都显示问题,接受问题:put:post答案,那么您将破坏基本的rails设计原则.

请注意,您的路线文件可能看起来像这样:

resources :questions do
  resource :answer
end
Run Code Online (Sandbox Code Playgroud)

这将揭示你可以发布的/ questions/8/answer路由:post to,to going to AnswersController#create.

在我的脑海中,我忘记了可以用来生成网址的帮助网址方法的确切名称.像question_answer_path(@my_question)之类的东西.

这个路由文件是针对rails3的,我假设你正在使用它,因为如果你在我看来你正在开始一个新的应用程序,没有理由使用其他任何东西:p

如果你有一个Answer模型(也许你想存储用户的答案并稍后查看它们或汇总它们并提出统计数据等),那么你应该改变使用的路由器resources :answer而不是单数版本.

有关路由和一些RESTful技巧的更多信息,您应该访问Ruby on Rails指南,以获取此处的路由:http: //guides.rubyonrails.org/routing.html

我正在编辑狂欢!有时您可能需要向Questions控制器添加一个非严格REST的附加方法.这不一定被认为是不好的做法,但只要确保你看看你的决定,并找出你是否实际上只是隐藏另一种资源的存在.我不认为这是上面解释的那些时间之一:)