在控制器中定义更多参数

时间:2012-12-22 14:00:30

标签: ruby-on-rails

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

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

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

创建的controllers / 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

1 个答案:

答案 0 :(得分:2)

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

一个人has_many :tasks

任务belongs_to :person

PersonTask都是作为支架生成的,所以它们工作正常。现在,您想要列出属于某个人的任务,并且您不确定它是应该由PersonsController还是TasksController处理,所以您只需要继续创建一个新的控制器为了那个原因。

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

resources :persons do
  resources :tasks
end

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

至于为什么你的代码不起作用,你实际上没有发布跟踪,甚至是行号,所以从这里诊断起来非常困难。