在我看来,有一个像这样的查询..
<%= CaricatureType.find_by(id: StudioOrder.find_by(user_id: spree_current_user.id).style_id).name %>
studio_orders和caricature_types的架构如下
create_table "studio_orders", force: :cascade do |t|
t.integer "user_id"
t.integer "occasion_id"
t.integer "style_id"
t.integer "number_of_people"
t.string "artwork_size"
t.integer "package_id"
t.text "instructions"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.float "initial_price"
t.float "final_price"
t.string "image_file_name"
t.string "image_content_type"
t.integer "image_file_size"
t.datetime "image_updated_at"
t.json "avatars"
t.integer "address_id"
end
create_table "caricature_types", force: :cascade do |t|
t.string "name"
t.text "description"
t.float "price"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
现在问题是,我上面发布的视图中的查询来自order_summary屏幕,查询只输出他选择的样式的名称。 现在的问题是,从技术上讲,studio_orders中可能有很多行具有相同的用户ID。 But how to display the current style the user has choosen in the order_summary screen.
答案 0 :(得分:0)
在您的视图中添加任何 ActiveRecord
声明是不好的做法。所有这些都应由控制器处理:
#app/controllers/your_controller.rb
class YourController < ApplicationController
def show
@types = CaricatureType.find_by(id: StudioOrder.find_by(user_id: spree_current_user.id).style_id).name %>
end
end
这有两个好处:
ActiveRecord
中被多次调用,@instance_variable
将重复使用这些数据
醇>
针对您的具体问题,
但是如何显示用户在
order_summary
屏幕中选择的当前样式
这是供你决定的。
理想情况下,您希望在current
表格中添加studio_orders
列。将类型boolean
分配给此列将允许您使用以下内容:
@current_type = CaricatureType.find_by id: spree_current_user.studio_orders.style_id, current: true
Rails可能会重视convention over configuration - 但您可以根据需要自由构建架构/模型。这包括在您需要时设置current
列。