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

如何在Ruby on Rails中基于数据库数据生成多页面?

在Ruby on Rails中实现食品详情页的动态生成

1. 模型与数据库配置

如果还未创建Food模型,先执行以下命令生成模型并完成数据库迁移:

rails generate model Food image:string food_name:string price:decimal
rails db:migrate

在app/models/food.rb中添加核心逻辑,用于生成友好的URL标识(slug):

class Food < ApplicationRecord
  validates :food_name, :price, presence: true
  # 自动将食品名转为URL友好的格式(如"Burger"转成"burger")
  before_save :generate_slug

  private
  def generate_slug
    self.slug = food_name.parameterize
  end
end

为数据库添加slug字段并设置唯一索引(避免重复URL):

rails generate migration AddSlugToFoods slug:string:uniq
rails db:migrate

2. 配置友好路由

在config/routes.rb中设置路由,让每个食品对应独立的URL:

# 直接生成www.foods.com/burger这类无前缀的URL
get '/:slug', to: 'foods#show', as: :food

# 如果需要保留前缀(如www.foods.com/foods/burger),则用资源路由:
# resources :foods, param: :slug

3. 编写控制器逻辑

在app/controllers/foods_controller.rb中实现show动作,读取对应食品的数据:

class FoodsController < ApplicationController
  def show
    @food = Food.find_by(slug: params[:slug])
    # 处理食品不存在的情况,返回404页面
    unless @food
      render file: "#{Rails.root}/public/404.html", status: :not_found, layout: false
    end
  end
end

4. 编写通用ERB模板

在app/views/foods/show.html.erb中编写通用模板,仅替换动态数据部分:

<div class="food-detail">
  <h1><%= @food.food_name %></h1>
  <img src="<%= @food.image %>" alt="<%= @food.food_name %>" class="food-img">
  <p class="price">价格:<%= number_to_currency(@food.price) %></p>
  
  <!-- 以下是模板的固定内容,所有页面保持一致 -->
  <div class="common-footer">
    <p>我们承诺使用新鲜食材制作每一份食品</p>
    <!-- 其他通用内容 -->
  </div>
</div>

5. 批量导入食品数据

在db/seeds.rb中添加批量数据,执行命令导入到数据库:

Food.create!([
  { food_name: "Burger", price: 12.99, image: "/assets/burger.jpg" },
  { food_name: "Pizza", price: 18.99, image: "/assets/pizza.jpg" },
  { food_name: "Spaghetti", price: 15.99, image: "/assets/spaghetti.jpg" },
  # 剩余17个食品数据依次添加
])

执行导入命令:

rails db:seed

完成以上步骤后,每个食品都会自动生成对应的独立URL,所有页面共用同一个ERB模板,仅替换从数据库读取的图片、名称和价格信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:28:09