我试图找到最干净的方法来根据其关联和搜索数组选择记录。
我有Recipes其中有许多Ingredients(通过一个连接表),我有一个搜索表单域为array中Ingredient.ids
要查找包含搜索数组中任何 id 的任何配方,我可以使用
例如 1。
filtered_meals = Recipe.includes(:ingredients).where("ingredients.id" => ids)
但是,我只想匹配在搜索数组中找到所有成分的食谱。
例如2。
search_array = [1, 2, 3, 4, 5]
Recipe1 = [1, 4, 5, 6]
Recipe2 = [1, 3, 4]
# results => Recipe2
Run Code Online (Sandbox Code Playgroud)
我知道我可以使用each循环,就像这样;
例如 3。
filtered_meals = []
Recipes.each do |meal|
meal_array = meal.ingredients.ids
variable = meal_array-search_array
if variable.empty?
filtered_meals.push(meal)
end
end
end
return filtered_meals
Run Code Online (Sandbox Code Playgroud)
这里的问题是分页。在第一个示例中,我可以使用.limit()并.offset()控制显示的结果数量,但在第三个示例中,我需要添加一个额外的计数器,将其与结果一起提交,然后在页面更改时,重新发送计数器并使用.drop(counter)在each.do循环上。
这似乎太啰嗦了,有没有更好的方法来做到这一点?
我有很多属于食谱和配料协会的。
我正在尝试返回在给定的整数数组中具有所有成分ID的配方。例如。我使用多种成分进行搜索,并且想要返回包含所有成分的任何食谱。如果给出的成分太多,但是食谱包括了所有成分,那么它也应该返回食谱。
我已经尝试了几件事,
Recipe.joins(:ingredients).where(ingredients: { id: ids })
Run Code Online (Sandbox Code Playgroud)
返回包含任何成分的食谱
Recipe.joins(:ingredients).where('ingredients.id LIKE ALL ( array[?])', ids)
Run Code Online (Sandbox Code Playgroud)
这给出了一个错误: ERROR: operator does not exist: integer ~~ integer
我怎样才能只找到包含数组中所有ID的配方?
我正在使用"wp作业管理器",并试图通过我在提交时添加到作业的自定义字段进行过滤/搜索.插件作者提供了一个教程,用于添加下拉菜单以过滤添加的"工资"字段,我想修改本教程以使用文本框而不是下拉列表.
该教程位于:https://wpjobmanager.com/document/tutorial-adding-a-salary-field-for-jobs/
假设数据与作业一起正确提交(在我的情况下是这样),以下代码允许您使用下拉菜单过滤作业,在价格范围之间进行选择.
add_action( 'job_manager_job_filters_search_jobs_end', 'filter_by_salary_field' );
function filter_by_salary_field() {
?>
<div class="search_categories">
<label for="search_categories"><?php _e( 'Salary', 'wp-job-manager' ); ?></label>
<select name="filter_by_salary" class="job-manager-filter">
<option value=""><?php _e( 'Any Salary', 'wp-job-manager' ); ?></option>
<option value="upto20"><?php _e( 'Up to $20,000', 'wp-job-manager' ); ?></option>
<option value="20000-40000"><?php _e( '$20,000 to $40,000', 'wp-job-manager' ); ?></option>
<option value="40000-60000"><?php _e( '$40,000 to $60,000', 'wp-job-manager' ); ?></option>
<option value="over60"><?php _e( '$60,000+', 'wp-job-manager' ); ?></option>
</select>
</div>
<?php
}
/**
* This code gets your posted field …Run Code Online (Sandbox Code Playgroud) 我对搜查搜索表单有点卡住了。
我需要搜索模型的关联,并在name_cont但仅当关联模型的status == something.
我有一个gig模型与模型和模型的has_many belongs_to关系。该模型具有属性和模型的属性。我想搜索并只显示具有.requestuserrequeststatususerpublicnamepublicname_contstatus == "hired"
目前,我的搜索带回了publicname无论 还是request模型的结果status。
演出控制器:
@gigs = @q.result(distinct: false).notexpired.order(date: :asc).page(params[:page]).per(20)
Run Code Online (Sandbox Code Playgroud)
搜索表格:
<%= search_form_for @q, url: welcome_index_url, remote: false do |f| %>
<%= text_field_tag :search, params[:search], class: 'loc-search', placeholder: "Location"%>
<%= f.search_field :locationname_cont, placeholder: "Bar name" %>
<%= f.search_field :requests_user_publicname_cont, placeholder: "Band name" %>
<%= f.submit %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
目前,我可以搜索requests_user_publicname_cont并在参数匹配的地方按预期为我提供所有结果。我正在寻找一种搜索 …
我在我的应用程序上使用“flatpickr”作为日期时间选择器。此日期选择器允许选择多个日期,但在阅读文档后,我找不到任何方法来限制所选日期的最大数量。
jQuery:
$('#gig_date_multi').flatpickr({
"mode": "multiple",
"locale": "<%= I18n.locale %>",
minDate: new Date(),
enableTime: true,
time_24hr: true,
minuteIncrement: 15,
onChange: function(selectedDates, dateStr, instance) {
var array = selectedDates;
if (array.length >= 3) {
console.log("YOU HAVE REACHED YOUR LIMIT")
} else {
console.log("YOU CAN STILL SELECT MORE DATES")
}
var newHTML = [];
$.each(array, function(index, value) {
var formatted = moment(value).format("HH:mm - dddd Do MMMM YYYY");
newHTML.push('<span>' + formatted + '</span>');
});
$(".multi-dates").html(newHTML.join(""));
}
});
Run Code Online (Sandbox Code Playgroud)
在这里,当选择 3 个日期时,控制台输出“您已达到限制”,我想也许我可以在发生这种情况时禁用所有日期(除了先前选择的日期)。
Flatpickr 有一个disableand …
好的,我允许用户上传mp3.现在由于某种原因,只有一些mp3文件会上传而其他的则不会.我找不到工作文件和非工作文件之间的任何明显区别.
class Song < ActiveRecord::Base
belongs_to :user
has_attached_file :audio, :restricted_characters => /[&$+,\/:;=?@<>\[\]\{\}\|\\\^~%#]/, dependent: :destroy
validates_attachment_presence :audio
validates_attachment_content_type :audio, :content_type => [ 'audio/mpeg', 'audio/mp3' ]
validates_attachment_size :audio, :less_than => 20.megabytes
end
Run Code Online (Sandbox Code Playgroud)
失败文件的服务器输出是;
Command :: file -b --mime '/tmp/acf7bcfce06ffcaa55511087ea2e486f20160427-7322-y1lyj6.mp3'
[paperclip] Content Type Spoof: Filename leyinnata.mp3 (audio/mp3 from Headers, ["audio/mpeg"] from Extension), content type discovered from file command: application/octet-stream. See documentation to allow this combination.
Run Code Online (Sandbox Code Playgroud)
所以文件被视为application/octet-stream代替,audio/mp3我不知道为什么.
我听从了阅读文档的建议并找到了可能的解决方案:
paperclip.rb
Paperclip.options[:content_type_mappings] = {
:audio=> 'application/octet-stream'
}
Run Code Online (Sandbox Code Playgroud)
这没什么.(我重新启动了服务器)
我无法理解为什么它不起作用,我现在变得非常沮丧.任何帮助将不胜感激,谢谢.
更新:
指定更多音频文件类型似乎没有任何区别.
validates_attachment_content_type …Run Code Online (Sandbox Code Playgroud) 在我的网站的移动版本上我使用input type=date而不是jquery datepicker来允许使用内置的datepicker设备,因为它通常更快更容易使用.
我试图检测1日期字段何时输入/更改值,然后更新min date第二个日期字段的属性,并使用ajax提交表单.
我无法正确检测输入或更改.
$('#mob-gig-date-gteq').blur(function() {
var date = $("#mob-gig-date-gteq").val();
console.log(date)
$(this).closest("form").submit();
});
Run Code Online (Sandbox Code Playgroud)
(使用.change产生相同的结果)
如果我在这里选择日期没有任何反应.如果我在计算机上选择日期,请按其中一个输入(日/月/年)输入,然后再次更改日期,代码将触发.在移动设备上根本没有任何发生
如何检测日期字段的输入更改?
谢谢.
jquery ×2
ruby ×2
activerecord ×1
arrays ×1
associations ×1
date ×1
datepicker ×1
flatpickr ×1
html ×1
javascript ×1
jobs ×1
mp3 ×1
paperclip ×1
php ×1
postgresql ×1
ransack ×1
select ×1
wordpress ×1