You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails开发疑问:如何实现个人与全局预订页面的区分展示

解决用户预订页面的显示问题

嘿,我看到你在处理两个预订页面的需求,咱们先把当前用户预订的问题搞定~

首先,你的控制器代码里有个明显的问题:Reservation.find_by_id(@user) 这行是错误的,find_by_id 方法需要传入预订的ID数值,但你传了一个完整的 User 对象,这肯定查不到任何数据。而且更高效的方式是利用 Rails 的 Active Record 关联来获取用户的预订,具体步骤如下:

1. 确保模型关联正确

首先检查你的 User 和 Reservation 模型是否设置了正确的关联:

  • 在 app/models/user.rb 中添加:
class User < ApplicationRecord
  has_many :reservations, dependent: :destroy # 可选:删除用户时自动删除其所有预订
end
  • 在 app/models/reservation.rb 中添加:
class Reservation < ApplicationRecord
  belongs_to :user
end

注意:要确保你的 reservations 数据库表中存在 user_id 字段(作为外键关联用户表),如果没有的话,需要生成迁移文件来添加这个字段。

2. 修改 Bookings 控制器的 index 方法

利用模型关联,你可以直接从用户对象获取其所有预订,代码更简洁且不易出错:

def index
  # 如果你用了 Devise 等认证系统,可以直接用 current_user 代替下面这行
  @user = User.find(session[:user_id])
  @reservations = @user.reservations # 这行就能拿到当前用户的所有预订
end

如果你的项目用了 Devise 做用户认证,还可以简化成:

def index
  @reservations = current_user.reservations
end

3. 实现“全部可见预订”页面

如果你想在同一个控制器里实现第二个页面,可以添加一个新的动作:

def all_reservations
  # 这里可以根据需求添加筛选条件,比如只显示已确认的预订
  @reservations = Reservation.all
end

然后在 config/routes.rb 中添加对应的路由:

resources :bookings do
  collection do
    get 'all_reservations'
  end
end

之后你可以创建 views/bookings/all_reservations.html.erb 来渲染所有预订的内容,逻辑和个人预订页面类似。

视图渲染示例

在 views/bookings/index.html.erb 中,你可以这样遍历显示用户的预订:

<h1>我的预订</h1>
<% if @reservations.empty? %>
  <p>暂时没有任何预订,快去创建一个吧!</p>
<% else %>
  <div class="reservations-list">
    <% @reservations.each do |reservation| %>
      <div class="reservation-item">
        <p><strong>预订主题:</strong><%= reservation.title %></p>
        <p><strong>时间:</strong><%= reservation.start_time.strftime("%Y-%m-%d %H:%M") %></p>
        <!-- 这里添加更多预订相关信息 -->
      </div>
    <% end %>
  </div>
<% end %>

内容的提问来源于stack exchange,提问作者M Ahmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:34:10