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
答案 0 :(得分:2)
我很确定其中一些文件实际上并不包含您声明的内容(例如person.rb
包含class Task
或包含root to:
的路径文件)。但是这看起来似乎是:
一个人has_many :tasks
。
任务belongs_to :person
。
Person
和Task
都是作为支架生成的,所以它们工作正常。现在,您想要列出属于某个人的任务,并且您不确定它是应该由PersonsController
还是TasksController
处理,所以您只需要继续创建一个新的控制器为了那个原因。
这似乎是嵌套路由的一种情况:
resources :persons do
resources :tasks
end
然后您可以访问/persons/4/tasks
以查看哪些任务属于某个人。
至于为什么你的代码不起作用,你实际上没有发布跟踪,甚至是行号,所以从这里诊断起来非常困难。