我是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格式一段时间后找到了解决方案。