4

我是 ruby​​ 新手,并开始创建我的 *nd 玩具应用程序。一世:

  1. 创建控制器“问题”
  2. 创建模型“问题”
  3. 创建控制器动作“新”
  4. 添加了“New.html.erb”文件

在 erb 文件中,我使用form_for助手和new控制器操作来实例化 @question实例变量。当我尝试运行它时,我得到了'undefined method: questions_path for #<ActionView::Base:0x5be5e24>'错误。下面是我的 new.html.erb:

<%form_for @question do |f| %>
   <%=f.text_field :title %>
<%end%>    

请告知如何解决此问题,并帮助我将此控制器操作混叠。我的意思是我想输入http://mysite/questions/ask,而不是 /questions/create

4

2 回答 2

8

config/routes.rb您需要添加:

map.resources :questions

修复未定义的方法 questions_path 问题。

一种获取方法/questions/ask是像这样修改routes.rb

map.ask_question '/questions/ask', :controller => 'questions', :action => 'create'

这将为您提供ask_question_path可以在代码中引用的内容。

于 2008-12-01T14:53:40.217 回答
0

看起来您单独完成了所有这些步骤。您应该尝试脚手架生成器,它将为您构建所有这些。

例子:

>ruby script/generate scaffold question question:string answer:string votes:integer
  exists  app/models/
  exists  app/controllers/
  exists  app/helpers/
  create  app/views/questions
  exists  app/views/layouts/
  exists  test/functional/
  exists  test/unit/
  exists  public/stylesheets/
  create  app/views/questions/index.html.erb
  create  app/views/questions/show.html.erb
  create  app/views/questions/new.html.erb
  create  app/views/questions/edit.html.erb
  create  app/views/layouts/questions.html.erb
  create  public/stylesheets/scaffold.css
  create  app/controllers/questions_controller.rb
  create  test/functional/questions_controller_test.rb
  create  app/helpers/questions_helper.rb
  route  map.resources :questions
  dependency  model
  exists    app/models/
  exists    test/unit/
  exists    test/fixtures/
  create    app/models/question.rb
  create    test/unit/question_test.rb
  create    test/fixtures/questions.yml
  create    db/migrate
  create    db/migrate/20081201150131_create_questions.rb

如您所见,通过脚手架,我们得到了我们的模型、控制器、视图、路由、数据库迁移,它将构建一个包含两个字段的问题表,以及 RESTful 控制器操作以立即添加/更新/查看/删除任何问题数据。哦,最重要的是,一组空的测试文件已准备好供您编写测试:)。

于 2008-12-01T15:03:58.467 回答