【问题标题】:Rails error "NoMethodError" - My first ruby appRails 错误“NoMethodError” - 我的第一个 ruby​​ 应用程序
【发布时间】:2012-10-01 17:45:50
【问题描述】:

我对 Rails 完全陌生,所以答案可能很简单。如下:

我的页面出现此错误

任务中的 NoMethodError#new
显示第 3 行引发的 app/views/tasks/new.erb:

未定义的方法 `tasks_path' 用于#

这里是视图:

<% form_for(@task) do |f| %>
    <%= f.error_messages %>

    <%= f.label :description %>:
    <%= f.text_field :description %><br />

    <%= f.label :priority %>:
    <%= collection_select(:news, :priority_id, Priority.find(:all), :id, :description) %><br />

    <%= f.submit "Add Task" %>

<% end %>

控制器:

class TasksController < ApplicationController
    def index
        @all_tasks = Task.find(:all, :order => :id)
    end

    def new
        @task = Task.new
    end ...(more)

和模型:

我看不出有什么问题,但就像我说的,到目前为止我一无所知。 谢谢!

class Task < ActiveRecord::Base
    validates_presence_of :description

    belongs_to :priority
    has_and_belongs_to_many :staff
    has_and_belongs_to_many :catagory

end

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    你有

    map.resources :tasks
    

    在你的路线中?

    【讨论】:

    • 哦,你说得对。添加后,我可以将 form_for 与@task 一起使用
    • 如果您的操作中有 @task = Task.new,则 form_for(@task) 引用空任务对象。 :task 将使您的表单提交到 tasks/new 而不是 RESTful task/ with method='post'。
    【解决方案2】:

    感谢您的回答。

    正如预测的那样,简单的问题。

    <% form_for(@task) do |f| %>
    

    应该是:

    <% form_for(:task) do |f| %>
    

    有趣的是,您总是在发布问题后立即找到答案! 再次感谢。

    【讨论】:

      【解决方案3】:

      关于此代码:

      @all_tasks = Task.find(:all, :order => :id)
      

      您不需要按 id 指定 order,因为这是默认行为。所以这应该足够了。

      @all_tasks = Task.find(:all)
      

      这可以进一步浓缩为以下内容

      @all_tasks = Task.find.all
      

      此外,rails 约定是将实例变量命名为@tasks

      @tasks = Task.find.all
      

      享受 Rails 的乐趣。

      【讨论】:

      • 谢谢。 Task.find.all 给出错误“找不到没有 ID 的任务”~$ ruby​​ --version ruby​​ 1.8.7 (2008-08-11 patchlevel 72) [i486-linux] ~$ rails --version Rails 2.3 .2
      【解决方案4】:

      请在查看中检查您的文件名.. 它应该有扩展名.html.erb 而不仅仅是.erb ...

      【讨论】:

        【解决方案5】:

        您是否使用脚手架生成器生成了这个示例?因为如果不是,可能是您忘记在 routes.rb 中定义资源 url 映射:

        --- a/config/routes.rb
        +++ b/config/routes.rb
        @@ -1,4 +1,6 @@
         ActionController::Routing::Routes.draw do |map|
        +  map.resources :tasks
        +
        

        添加路由后别忘了重启webrick!

        【讨论】:

        猜你喜欢
        • 2013-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多