Sinatra DataMapper一对多关系



我是Sinatra的新手,我对DataMapper一对多关系有问题

db.rb

env = ENV["RACK_ENV"]
url = Dir.pwd + "/db/#{env}"
DataMapper.setup :default, "sqlite://#{url}.sqlite3"
class Order
  include DataMapper::Resource
  property :id, Serial
  property :client, String
  has n, :order_items
end
class OrderItem
  include DataMapper::Resource
  property :id, Serial
  property :dish_id, Integer
  belongs_to :order
end
DataMapper.finalize
DataMapper.auto_upgrade!

菜肴.rb

DISHES = [
  { id: 1, name: "Mac and Cheese", category: "Pasta", price: 10 },
  { id: 2, name: "Steak", category: "Meat", price: 9 },
  { id: 3, name: "Fish and Chips", category: "Fish", price: 12 },
  { id: 4, name: "Tiramisu", category: "Dessert", price: 5 }
]

app.rb

get do
  @orders = Order.all
  @dishes = DISHES
  haml %s(orders/index)
end

索引.haml

%table.row
  -@orders.each do |order|
    %tr
      %td=order.client
      %td
        %ul
          -order.order_items.each do |item|
            %li
              -@dishes.select { |dish| dish[:id] == item.dish_id }.first[:name]

此行:

-@dishes.select { |dish| dish[:id] == item.dish_id }.first[:name]

没有展示客户已经挑选的任何菜肴,怎么了?

对不起我太笨了,这一行:

-@dishes.select { |dish| dish[:id] == item.dish_id }.first[:name]

应为:

=@dishes.select { |dish| dish[:id] == item.dish_id }.first[:name]

所以它会打印出结果,我在把它改成erb格式一段时间后找到了解决方案。

最新更新