【问题标题】:Select parent and child records and sort by child using rails 3使用rails 3选择父子记录并按子排序
【发布时间】:2012-01-29 17:58:33
【问题描述】:

我正在尝试在用户的“显示”页面上显示所有任务的列表(包括每个任务的相关项目信息)。

User has_many projects
Project belongs_to user
Project has_many tasks
Task belongs_to project

我想要一个用户所有任务的列表,每个任务都有单独的行,即使它们都与单个项目相关。我需要在行中显示项目名称以及任务名称。

例如

**Tasks for User 1**
Project 1  |  Task 1
Project 2  |  Task 2
Project 3  |  Task 3
Project 1  |  Task 4
Project 3  |  Task 5
Project 3  |  Task 6
Project 2  |  Task 7

谁能建议如何使用 Rails 3?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 model parent


    【解决方案1】:

    有两种方法。一个使用连接:

    @tasks = @user.tasks.joins(:projects).order("projects.id")
    

    要完成这项工作,用户必须有许多任务

    has_many :tasks, through: :projects
    

    另一种方法使用预加载:

    @projects = @user.projects.includes(:tasks)
    

    【讨论】:

    • 我想这就是我所追求的。您能否举一个在视图中输出它的示例 - 即引用项目和任务表中的列
    • 有点像@tasks.each{ |t| [t.name, t.project.name].join("-") }
    • 这就是我所追求的,但我认为你的代码应该是 @tasks.each do |t| { [t.name, t.project.name].join("-") }
    【解决方案2】:
    # controller
    @projects = current_user.projects.joins(:tasks)
    
    # view
    -@projects.each do |project|
      -project.tasks.each do |task|
        %p
          =project.title
          |
          =task.title
    

    【讨论】:

    • 这不是我所追求的,因为它循环遍历项目和任务。我想我的问题措辞错误......对不起。我需要遍历任务并根据需要为每个输出项目信息,以便它可以显示一个项目的任务,然后显示其他项目的任务,并在列表的下方再次显示该项目的任务(不一定一起)。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多