我有一個基本的任務管理應用程序。它有一個叫Task的類,我用它來跟蹤任務。它有另一個叫做User的類,我用它進行身份驗證。如何關聯這些模型? Rails 3.2.13 Postgresql 9.1
任務有一個名爲'user_email'的變量,用戶有一個名爲'email'的變量。我想使用這些變量作爲foreign_keys。某些任務的「user_email」實際上可能不屬於某個用戶。我不希望這些協會依賴。
我現在想關聯有許多任務的用戶。然後在用戶顯示頁面上顯示用戶任務。
我有一個基本的任務管理應用程序。它有一個叫Task的類,我用它來跟蹤任務。它有另一個叫做User的類,我用它進行身份驗證。如何關聯這些模型? Rails 3.2.13 Postgresql 9.1
任務有一個名爲'user_email'的變量,用戶有一個名爲'email'的變量。我想使用這些變量作爲foreign_keys。某些任務的「user_email」實際上可能不屬於某個用戶。我不希望這些協會依賴。
我現在想關聯有許多任務的用戶。然後在用戶顯示頁面上顯示用戶任務。
爲了有許多任務,以下行添加到您的用戶模型中的用戶相關聯:
has_many :tasks
現在你還需要考慮該協會的另一邊照顧。 (即任務給用戶)推測你的任務只有一個用戶?在這種情況下,任務模型將需要行:
belongs_to :user
要了解更多有關協會在Rails的,我建議你檢查出的Rails指南:http://guides.rubyonrails.org/association_basics.html
你真的想用的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
不知道這是處理這種最好的方式,但是這是做的我我目前在做...
我基本上想要顯示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 %>
所以,我完成了我想沒有關聯的模型做。如果有人能提出更好的方法來做到這一點,請繼續。
您仍然希望使用用戶標識作爲條件,但首先使用提供current_user幫助程序的身份驗證插件或手動User.where(email:user_email)查詢用戶, – MatthewFord