Ruby on Rails:搜索后,列出不显示所有数据
我有一个问题,我在搜索中获得了重复的结果,在我的rails应用程序中允许用户搜索数据库中的项目。
这是项目模型中的搜索function:
def self.search(search_industry, search_role, search_techs_ids) _projects = Project.scoped if search_industry.present? _projects = _projects.where ['industry LIKE ?', like(search_industry)] end if search_role.present? _projects = _projects.where ['role LIKE ?', like(search_role)] end if search_techs_ids.present? _projects = _projects.includes(:technols).where("technols.id" => search_techs_ids) end _projects end
这是我的搜索页面的一部分
Technologies : true} ) %> true, :selected => tech_ids } ) %>
这是我的搜索操作:
def search tech_ids = params[:technols][:id].reject(&:blank?) unless params[:technols].nil? @search = params[:industry], params[:role], tech_ids @project_search = Project.search(*@search).order(sort_column + ' ' + sort_direction).paginated_for_index(per_page, page) @search_performed = !@search.reject! { |c| c.blank? }.empty? @project = Project.new(params[:project]) @all_technols = Technol.all @project_technol = @project.projecttechnols.build respond_to do |format| format.html # search.html.erb format.json { render :json => @project } end end
这个问题现在已经排序了,但是在解决这个问题时,我注意到当我搜索单一技术时,表中会显示正确的项目,但在技术专栏中,它是为了展示属于该项目的所有技术,但它只显示我搜索的那个:
-
有任何想法吗? 在我的模型中,我曾经有过这个代码,它可以正确显示表格,但显示重复的结果。
if search_techs_ids.present? _projects = _projects.joins(:technols).where("technols.id" => search_techs_ids) end
任何帮助都将不胜感激。 提前致谢
解决方案见下面的答案
@shioyama和@tommasop都帮助解决了这个问题。
解决方案是更改我的搜索视图所在的列
我以不同的forms遇到了同样的问题: 使用includes匹配嵌套模型关联属性
另请参阅globalize3 github问题页面上的讨论 ,在尝试使用动态查找器搜索后销毁记录时出现问题(在DB中留下不匹配的关联)。
问题是您将连接限制为具有给定技术关联的项目(在search_tech_ids
具有id
s的项目),因此这些是rails返回的唯一行。 Rails无法知道那里有其他人。
基本上我可以说,最简单的解决方案就是在完成搜索后重新加载项目。 在search
方法的最后一行上方添加一行,如下所示:
_projects.each { |p| p.technols.reload } _projects
这将告诉rails重新加载与每个项目相关的技术,包括它在搜索中不匹配的技术。 我相信这应该适合你的情况。
更新 :
经过多次尝试(参见评论)和@tommasop的建议,解决方案是强制重新加载视图中的技术:
t.technols(force_reload=true).each
仍然不清楚为什么上面的重载方法不起作用。 如果有人有任何见解,请告诉我,我很想听到。
尝试使用以下语法:
_projects.each { |p| p.technols(force_reload=true) } _projects
这里参考 。
- Rails 4通过单个属性查询唯一
- Cloud9 postgres
- 无法通过Rails 5应用程序中的表单创建新记录
- 由于未知OID被视为String,ActiveRecord和SQL不会返回相同结果的情况
- Rails数据库,为什么要使用相同的DBMS进行开发和生产?
- 如何在Rails中基于外键列选择唯一记录?
- Rails,PostgreSQL和历史触发器
- 如何使用Rails在一个查询中执行多个语句?
- ActiveRecord可以远程连接到PostgreSQL并保护数据库密码吗?
Interesting Posts
ActiveRecord:如何找到所有孩子符合条件的父母?
相当于Postgres中的strftime
如何从SQLite迁移到PostgreSQL(Rails)
查找不存在连接的记录
如何从SQLite3切换到Postgres以在Heroku上部署
删除一些以前的数据后,如何重新启动PostgreSQL中的表的id计数?
在ruby / ActiveRecord中生成类似Instagram或Youtube的不可语句字符串ID
耙子流产了! Gem :: LoadError:为数据库适配器指定’postgresql’
Rails:在同一个应用程序中同时使用mysql和postgres?
为字段创建PostgreSQL序列(不是记录的ID)