1
我已經閱讀了一些教程,並在一本關於使用Active Record的書中,但是我很難將這些部分捆綁在一起。我曾經設計出應對創建模型稱爲用戶:Ruby On Rails使用Active Record關聯對象
class User < ActiveRecord::Base
has_many :tasks
....
end
我用腳手架創建任務:
class Task < ActiveRecord::Base
belongs_to :user#, :autosave => true
validates_presence_of :description, :date
validates_numericality_of :hours
def add_user(creating_user)
user << creating_user
end
end
task_controller.rb
# POST /tasks
# POST /tasks.json
def create
@task = Task.new(params[:task])
# add in user to task
@task.add_user current_user
respond_to do |format|
if @task.save
.... #default code
end
end
end
當我嘗試然後保存任務通過它抱怨對象的視圖爲零:
NoMethodError in TasksController#create
You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.<<
Rails.root: /home/steven/csc309/project/Source/TPHNN
Application Trace | Framework Trace | Full Trace
app/models/task.rb:8:in `add_user'
app/controllers/tasks_controller.rb:48:in `create'
Request
Parameters:
{"utf8"=>"✓",
"authenticity_token"=>"zSslFLGZ+dbwr1+TBlUtq1F89chUtlBSV3qTHe6G0yY=",
"task"=>{"id"=>"-4",
"hours"=>"1",
"miles"=>"2",
"description"=>"dd",
"date(1i)"=>"2012",
"date(2i)"=>"2",
"date(3i)"=>"23",
"date(4i)"=>"23",
"date(5i)"=>"34"},
"commit"=>"Create Task"}
Show session dump
_csrf_token: "zSslFLGZ+dbwr1+TBlUtq1F89chUtlBSV3qTHe6G0yY="
session_id: "31e12032237fb42146b5291ab01cf71f"
warden.user.user.key: ["User", [1], "$2a$10$9P8RUZvg6r4LNSRy5FOdFu"]
感謝您的幫助
非常感謝您的幫助。 user = creating_user不起作用,但是你建議做的事情是「@task = current_user.tasks.new(params [:task])」,非常感謝你。對於其他人來說,爲了使這一切正常工作,我需要執行以下遷移操作:rails generate migration AddUserIdToTasks user_id:reference – 2012-02-24 05:48:13