我需要能够通过has_many关联搜索用户的特定商品。
我最初在我的Items模型上使用searchkick
,现在在我的User模型上使用它。几周前,我也曾向question询问过同样的问题,但是我没有收到任何回复,自那以后对代码进行了相当多的修改。
class User < ApplicationRecord
searchkick
has_many :items, -> (user) { unscope(:where).where("(consumer_type = ? and consumer_id = ?))", 'User', user.id) }, fully_load: false, dependent: :destroy
def search_data
attributes.merge(
items: library_items.as_json,
)
end
end
在我的控制器中,我需要能够运行诸如@results = current_user.items.search('Query')
之类的查询,以便我返回只有该用户有权访问的项目。
当前,当我在Rails控制台中运行类似的命令时: 用户= User.first user.search'电子邮件' 我为#
获得了“未定义的方法'搜索'如何正确设置类似的设置?我是否应该将searchkick
放在Item模型上?如果是这样,那我该如何搜索
答案 0 :(得分:0)
我的解决方法是使用Searchkick为Option
模型建立索引,因为这样可以更轻松地获得所需的结果,尤其是在您只需要有关结果中返回的项目的信息(而不一定是用户数据)。
然后您可以使用类似以下内容的方法来搜索Predicate<BigDecimal> feeCheck =
feePerTransactOrRevenue -> feePerTransactOrRevenue != null
&& feePerTransactOrRevenue.intValue() < 0;
boolean globalRequestCheck = globalPricingRequests.stream()
.map(GlobalPricingRequest::getFeePerTransact)
.anyMatch(feeCheck);
boolean eventTypeCheck = globalPricingRequests.stream()
.map(GlobalPricingRequest::getEventTypePricingList)
.flatMap(List::stream)
.map(EventTypePricingMapping::getFeePerRevenue)
.anyMatch(feeCheck);
// if any of the element matches the condition, throw the exception
if (globalRequestCheck || eventTypeCheck) {
throw ExceptionHelper.badRequest("Fee Per Transaction can't be less than zero");
}
模型:
Item