小编Rob*_*hes的帖子

Ruby on Rails - 选择数组中所有 id 的位置

我试图找到最干净的方法来根据其关联和搜索数组选择记录。

我有Recipes其中有许多Ingredients(通过一个连接表),我有一个搜索表单域为arrayIngredient.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循环上。

这似乎太啰嗦了,有没有更好的方法来做到这一点?

ruby arrays postgresql select ruby-on-rails

6
推荐指数
1
解决办法
3331
查看次数

Ruby On Rails 5,activerecord查询,其中模型关联标识包括数组中的所有标识

我有很多属于食谱和配料协会的。

我正在尝试返回在给定的整数数组中具有所有成分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的配方?

ruby activerecord ruby-on-rails

5
推荐指数
1
解决办法
342
查看次数

wp作业管理器自定义过滤器

我正在使用"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)

html php wordpress jobs

4
推荐指数
1
解决办法
6847
查看次数

轨道上的红宝石。Ransack 搜索关联

我对搜查搜索表单有点卡住了。

我需要搜索模型的关联,并在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并在参数匹配的地方按预期为我提供所有结果。我正在寻找一种搜索 …

ruby-on-rails associations ransack

3
推荐指数
1
解决办法
4440
查看次数

Flatpickr - 限制可以选择的日期数量

我在我的应用程序上使用“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 …

jquery datepicker flatpickr

3
推荐指数
1
解决办法
8468
查看次数

Ruby on rails.Paperclip mp3验证失败

好的,我允许用户上传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)

mp3 ruby-on-rails paperclip

2
推荐指数
1
解决办法
982
查看次数

jQuery的.检测输入类型"日期"的变化

在我的网站的移动版本上我使用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产生相同的结果)

如果我在这里选择日期没有任何反应.如果我在计算机上选择日期,请按其中一个输入(日/月/年)输入,然后再次更改日期,代码将触发.在移动设备上根本没有任何发生

如何检测日期字段的输入更改?

谢谢.

javascript jquery date

1
推荐指数
1
解决办法
1万
查看次数