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) 和房间名称。 (课程名称和时间我没有做模型)
如果您能给我任何建议,我们将不胜感激。
user.rb
class User < ActiveRecord::Base
has_many :schedlues
...
schedule.rb
class Schedule < ActiveRecord::Base
belongs_to :user
has_many :rooms
...
room.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
我还没有制作课程名称、时间的模型。
users_controller.rb
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
@schedules = @user.schedules.paginate(page: params[:page])
end
...
show.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
我想开发一个用于日程安排的应用程序。 每个用户创建自己的时间表。
我想将数据显示如下;
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) 和房间名称。 (课程名称和时间我没有做模型)
如果您能给我任何建议,我们将不胜感激。
user.rb
class User < ActiveRecord::Base
has_many :schedlues
...
schedule.rb
class Schedule < ActiveRecord::Base
belongs_to :user
has_many :rooms
...
room.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
我还没有制作课程名称、时间的模型。
users_controller.rb
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
@schedules = @user.schedules.paginate(page: params[:page])
end
...
show.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