0

Ruby on rails 在控制器中定义了 7 个参数,

如果我想要更多参数,我可以向控制器添加变量,还是应该创建一个新控制器?

如果我必须创建另一个控制器,我尝试通过以下方式定义它:

创建了控制器/taskseachperson_controller.rb,其中包含:

class TaskseachpersonController < ApplicationController

def index

    end
end

helpers/taskseachperson.rb 包含:

module TaskseachpersonHelper
end

views/taskseachperson/index.html.erb 包含:

<h1>Listing tasks</h1>

<table>
   <tr>
      <th>Name</th>
      <th>num of tasks</th>
      <th>num tasks left</th>
   </tr>
<% end %>
</table>

config/locales/routes.rb 文件包含:

Todo::Application.routes.draw do
    resources :tasks
    root to: "tasks#index"

    resources :taskseachperson
    root to: "taskseachperson#index"
end

但是,当我尝试连接到:localhost:3000/taskseachperson

我收到了这个错误:

NoMethodError in TaskseachpersonController#index

undefined method `key?' for nil:NilClass
Rails.root: /home/alon/projects/todo

Application Trace | Framework Trace | Full Trace
Request

Parameters:

None
Show session dump

Show env dump

Response

Headers:

None

如果我必须创建另一个控制器,我的问题是什么?

更新:

我有一个文件:models/person.rb:

class Task < ActiveRecord::Base
    attr_accessible :done, :name, :task
end
4

1 回答 1

2

我很确定其中一些文件实际上并不包含您声称的内容(例如person.rb包含class Task或包含 a 的路由文件root to:)。但这似乎是:

一个人has_many :tasks

一个任务belongs_to :person

两者都是作为脚手架生成的PersonTask因此它们工作正常。现在,您想要列出属于某个人的任务,并且您不确定它是否应该由PersonsController或来处理TasksController,因此您只是继续为此创建了一个新控制器。

这似乎是嵌套路由的情况:

resources :persons do
  resources :tasks
end

然后,您可以访问/persons/4/tasks以查看属于某个人的任务。

至于为什么您的代码不起作用,您实际上并没有发布跟踪,甚至没有发布行号,因此从这里很难诊断。

于 2012-12-22T15:51:19.113 回答