2013-06-24 48 views
0

我有一個基本的任務管理應用程序。它有一個叫Task的類,我用它來跟蹤任務。它有另一個叫做User的類,我用它進行身份驗證。如何關聯這些模型? Rails 3.2.13 Postgresql 9.1

任務有一個名爲'user_email'的變量,用戶有一個名爲'email'的變量。我想使用這些變量作爲foreign_keys。某些任務的「user_email」實際上可能不屬於某個用戶。我不希望這些協會依賴。

我現在想關聯有許多任務的用戶。然後在用戶顯示頁面上顯示用戶任務。

回答

1

爲了有許多任務,以下行添加到您的用戶模型中的用戶相關聯:

has_many :tasks 

現在你還需要考慮該協會的另一邊照顧。 (即任務給用戶)推測你的任務只有一個用戶?在這種情況下,任務模型將需要行:

belongs_to :user 

要了解更多有關協會在Rails的,我建議你檢查出的Rails指南:http://guides.rubyonrails.org/association_basics.html

0

真的想用的ID,而不是電子郵件來識別任務的所有者。類似於

class Task 
    belongs_to :user 
end 

class User 
    has_many :tasks 
end 

這需要您將一個名爲user_id的整數字段添加到任務表中。


如果您想使用的電子郵件,用於識別用戶的任務,你仍然可以

class User 
    has_many :tasks, :conditions => ['user_email = #{self.email}'] 
end 
+0

您仍然希望使用用戶標識作爲條件,但首先使用提供current_user幫助程序的身份驗證插件或手動User.where(email:user_email)查詢用戶, – MatthewFord

0

不知道這是處理這種最好的方式,但是這是做的我我目前在做...

我基本上想要顯示user_email與其顯示頁面上當前登錄用戶的電子郵件相同的任務。

在users_controller.rb

def show 
    @user = User.find(params[:id]) 
    @tasks = Task.where(:user_email => @user.email) 
end 

在用戶/ show.html.erb

<h1><%= @user.name %></h1> 
<% @tasks.each do |task| %> 
    <%= task.title %><br /> 
<% end %> 

所以,我完成了我想沒有關聯的模型做。如果有人能提出更好的方法來做到這一點,請繼續。