Ruby Rails、SQL 服务器查询
Ruby on Rails, SQL Server Query
我在处理以下查询时遇到问题。我不知道为什么。
这是用户模型:
class UserProfile < ActiveRecord::Base
self.table_name = "UserProfile"
self.primary_key = "UserId"
has_many :user_access_job_list, class_name: 'UserAccessJobList', foreign_key: 'UserId'
has_many :job_tables, class_name: 'JobTable', through: :user_access_job_list
has_many :order_histories, class_name: 'OrderHist', through: :job_tables
has_many :order_hist_lines, class_name: 'OrderHistLine', through: :job_tables
has_many :delivery_histories, class_name: 'DeliveryHist', through: :job_tables
end
这是订单项历史模型:
class OrderHistLine < ActiveRecord::Base
self.table_name = "OrderHistLine"
self.primary_key = "WebLineId"
belongs_to :job_table, class_name: 'JobTable', foreign_key: 'JobId'
belongs_to :job_product, class_name: 'JobProduct', foreign_key: 'ItemId'
belongs_to :order_hist, class_name: 'OrderHist', foreign_key: 'WebOrderId'
has_many :delivery_histories, class_name: 'DeliveryHist', foreign_key: 'WebLineId'
end
我正在尝试查询特定产品名称的订单行项目历史记录。 ItemFreeTxt 是作业产品中产品名称的列名称。
我正在使用以下查询:
@user.order_hist_lines.joins(:job_product).where(ItemFreeTxt: "xxxxxxxxxxx")
这给了我错误:
ActiveRecord::StatementInvalid: TinyTds::Error: Invalid column name 'ItemFreeTxt'.: EXEC sp_executesql N'SELECT [OrderHistLine].* FROM [OrderHistLine] INNER JOIN [JobProduct] ON [JobProduct].[ItemId] = [OrderHistLine].[ItemId] INNER JOIN [JobTable] ON [OrderHistLine].[JobId] = [JobTable].[JobId] INNER JOIN [UserAccessJobList] ON [JobTable].[JobId] = [UserAccessJobList].[JobId] WHERE [UserAccessJobList].[UserId] = @0 AND [OrderHistLine].[ItemFreeTxt] = N''1''', N'@0 nvarchar(10)', @0 = N'LamCK'
但是,当我使用 ItemId 而不是产品名称进行搜索时,它会起作用。
@user.order_hist_lines.joins(:job_product).where(ItemId: "SI000110")
我可以毫无问题地从以下查询中获取唯一的产品名称和商品 ID:
@user.order_hist_lines.includes(:job_product).pluck(:ItemId).uniq
@user.order_hist_lines.includes(:job_product).pluck(:ItemFreeTxt).uniq
所以我不确定为什么我不能查询 ItemFreeTxt 不工作。非常感谢任何建议或帮助。非常感谢你提前。如果我需要提供更多信息,请告诉我。
您需要将 table 名称添加到查询中:
@user.order_hist_lines.joins(:job_product).
where(JobProduct: { ItemFreeTxt: "xxxxxxxxxxx" })
我在处理以下查询时遇到问题。我不知道为什么。
这是用户模型:
class UserProfile < ActiveRecord::Base
self.table_name = "UserProfile"
self.primary_key = "UserId"
has_many :user_access_job_list, class_name: 'UserAccessJobList', foreign_key: 'UserId'
has_many :job_tables, class_name: 'JobTable', through: :user_access_job_list
has_many :order_histories, class_name: 'OrderHist', through: :job_tables
has_many :order_hist_lines, class_name: 'OrderHistLine', through: :job_tables
has_many :delivery_histories, class_name: 'DeliveryHist', through: :job_tables
end
这是订单项历史模型:
class OrderHistLine < ActiveRecord::Base
self.table_name = "OrderHistLine"
self.primary_key = "WebLineId"
belongs_to :job_table, class_name: 'JobTable', foreign_key: 'JobId'
belongs_to :job_product, class_name: 'JobProduct', foreign_key: 'ItemId'
belongs_to :order_hist, class_name: 'OrderHist', foreign_key: 'WebOrderId'
has_many :delivery_histories, class_name: 'DeliveryHist', foreign_key: 'WebLineId'
end
我正在尝试查询特定产品名称的订单行项目历史记录。 ItemFreeTxt 是作业产品中产品名称的列名称。 我正在使用以下查询:
@user.order_hist_lines.joins(:job_product).where(ItemFreeTxt: "xxxxxxxxxxx")
这给了我错误:
ActiveRecord::StatementInvalid: TinyTds::Error: Invalid column name 'ItemFreeTxt'.: EXEC sp_executesql N'SELECT [OrderHistLine].* FROM [OrderHistLine] INNER JOIN [JobProduct] ON [JobProduct].[ItemId] = [OrderHistLine].[ItemId] INNER JOIN [JobTable] ON [OrderHistLine].[JobId] = [JobTable].[JobId] INNER JOIN [UserAccessJobList] ON [JobTable].[JobId] = [UserAccessJobList].[JobId] WHERE [UserAccessJobList].[UserId] = @0 AND [OrderHistLine].[ItemFreeTxt] = N''1''', N'@0 nvarchar(10)', @0 = N'LamCK'
但是,当我使用 ItemId 而不是产品名称进行搜索时,它会起作用。
@user.order_hist_lines.joins(:job_product).where(ItemId: "SI000110")
我可以毫无问题地从以下查询中获取唯一的产品名称和商品 ID:
@user.order_hist_lines.includes(:job_product).pluck(:ItemId).uniq
@user.order_hist_lines.includes(:job_product).pluck(:ItemFreeTxt).uniq
所以我不确定为什么我不能查询 ItemFreeTxt 不工作。非常感谢任何建议或帮助。非常感谢你提前。如果我需要提供更多信息,请告诉我。
您需要将 table 名称添加到查询中:
@user.order_hist_lines.joins(:job_product).
where(JobProduct: { ItemFreeTxt: "xxxxxxxxxxx" })