rails中的undefined方法

时间:2008-12-01 14:23:01

标签: ruby-on-rails ruby routing

我是ruby的新手并开始创建我的*玩具应用程序。 I:

  1. 创建控制器'问题'
  2. 创建模型'问题'
  3. 创建控制器操作'new'
  4. 添加了'New.html.erb'文件
  5. 在erb文件中的

    我使用form_for helper和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

2 个答案:

答案 0 :(得分: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,您可以在代码中引用它。

答案 1 :(得分: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

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