我真的很困惑has_many和belongs_to如何在控制器中工作,更具体地说是如何查询数据。
我有一个用户模式和任务模型,用户可以拥有许多任务和任务属于一个特定用户。
以下是我的模特:
class Task < ActiveRecord::Base
belongs_to :user
validates :title,
presence: true,
length: {minimum: 5, maximum: 50}
validates :description,
presence: true,
length: {minimum: 1, maximum: 140}
end
class User < ActiveRecord::Base
has_many :tasks, dependent: :destroy
has_secure_password
validates :email,
presence: true,
uniqueness: true
end
因此,在我的Tasks控制器中,我将如何实现相同的操作:
def index
# Get all tasks from database
@tasks = Task.all
# how would you achieve the same thing, but only show tasks that belong to a specific user? something like this:
@tasks.users.find(:all)?
end
我一直在做研究,但我似乎无法掌握这一点。无论如何,任何解释都会有所帮助。谢谢你们。
http://guides.rubyonrails.org/active_record_querying.html
http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/belongs_to
http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_many
答案 0 :(得分:0)
首先使用find或find_by_id查找用户记录。
user = User.find_by_id(id)
然后调用用户对象上的任务,该任务将列出该特定用户的所有任务。
list_of_tasks = user.tasks
答案 1 :(得分:0)
有关查询has_many关联的正确方法,请参阅Rails&#39;关于热切加载关联的文档(特别是includes
方法):
http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations
我不确定您希望从数据库表中提取哪些类型的信息,但以下是您可以查询所有任务及其相关用户的几个示例。
@tasks_and_users = Task.all.includes(:user)
@tasks_and_users.each do |task|
puts "The user with email '#{task.user.email}' has this task: #{task.title}"
end
或者,如果您想要所有用户的列表(无论他们是否有任何任务)及其相关任务,可以选择以下方法:
@users_and_tasks = User.all.includes(:tasks)
@users_and_tasks.each do |user|
puts "The user with with email '#{user.email}' has the following tasks:"
user.tasks.each do |task|
puts "\t Task: #{task.title}"
end
end