2012-02-24 81 views
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"] 

感謝您的幫助

回答

2

關閉但不是那裏!這可能是更你想要什麼:

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 

或者你可以在你的控制器簡化問題,做這一切在一個步驟有:

def create 
    @task = current_user.tasks.new(params[:task]) 

    ... 
+0

非常感謝您的幫助。 user = creating_user不起作用,但是你建議做的事情是「@task = current_user.tasks.new(params [:task])」,非常感謝你。對於其他人來說,爲了使這一切正常工作,我需要執行以下遷移操作:rails generate migration AddUserIdToTasks user_id:reference – 2012-02-24 05:48:13

相關問題