0
我在遇到以下查詢時遇到了問題。我不知道爲什麼。Ruby on Rails,SQL Server查詢
這是用戶模式:
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'
然而,當我搜索使用使用項目Id,而不是產品名稱的搜索我的作品。
@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不工作。任何意見或幫助,不勝感激。非常感謝你提前。讓我知道是否需要提供更多信息。
它給我這個錯誤:的ActiveRecord :: StatementInvalid:TinyTds ::錯誤:多部分標識符「job_product.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 [Job_product]。[ItemFreeTxt] = N'WW 20/20D,75 PFA(MAX。W/C 0.60)''',N'0 nvarchar(10)',@ 0 = N'LamCK' –
任何想法是什麼錯誤? –
@ShinonChan:由於表名不符合Rails的約定,所以錯誤信息有點難以理解。我更新了答案中的where子句。散列結構取決於表名。 – spickermann