繁体   English   中英

Rails4:如何在许多 has_many 模型中显示数据

[英]Rails4: How to display the data in many has_many models

我想为日程开发一个应用程序。 每个用户创建自己的时间表。

我想将数据显示如下;

schedule title (user name)

  day1(mm/dd,yyyy)
    09:00 Math
    11:00 Science
    Room name A

  day2(mm/dd,yyyy)
    10:00 Physics 
    13:00 Music
    Room name B

虽然我可以显示日程标题和用户名,但我无法显示日期(mm/dd,yyyy)和房间名称。 (课程名称和时间我没有做模型)

如果您能给我任何建议,我们将不胜感激。

用户名

class User < ActiveRecord::Base
  has_many :schedlues
  ...

日程表

class Schedule < ActiveRecord::Base
  belongs_to :user
  has_many :rooms
  ...

房间.rb

class Room < ActiveRecord::Base
  belongs_to :schedlue

模式

create_table "users", force: :cascade do |t|
    t.string   "name"
    t.string   "email"
    ...
end

create_table "schedules", force: :cascade do |t|
    t.string   "title"
    t.integer  "user_id"
    ...
end

create_table "rooms", force: :cascade do |t|
    t.date     "date"
    t.string   "room_name"
    t.integer  "schedule_id"
    ...
end

我还没有为课程名称制作模型,时间还没有。

用户控制器.rb

class UsersController < ApplicationController
  def show
    @user = User.find(params[:id])
    @schedules = @user.schedules.paginate(page: params[:page])
  end
  ...

显示.html.erb

    <% if @user.schedules.any? %>
      <ol class="schedules">
        <%= render @schedules %>
      </ol>
      <%= will_paginate @schedules %>
    <% end %>

_schedule.html.erb

<li>
  <span class="content"><%= schedule.title %>(<%= schedule.user.name %>)</span>
  #Although I tried to display date and room name here, I couldn't.
</li>

你需要在这里使用has_many + through关系。

看,一个用户有has_many日程表,一个日程表有多个房间。 所以,间接用户has_many客房以及。 您必须在User模型中编写以下代码行:

class User < ActiveRecord::Base
  has_many :schedules
  has_many :rooms, through: :schedules
end

现在,您可以直接调用用户对象上的rooms ,如下所示:

user = User.last
user.rooms.each do |room|
  puts room.room_name # calling it simply `name` would be more appropriate.
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM