用搜索范围缩小搜索范围

时间:2015-07-31 16:00:52

标签: ruby-on-rails ransack

我有工人,工人有很多职位。我希望能够搜索一个工作人员,显示他的所有帖子,然后缩小到发布帖子的日期。我可以按工作人员的名字进行搜索,但是当我尝试搜索日期时,它只显示该工作人员的所有帖子(如果日期存在于一个帖子中)。

我试图与之合作:

控制器:

for ind_mail in emails:
    msg_string = ind_mail['RFC822'].decode("utf-8")
    #print(msg_string.decode("utf-8"))
    email_msg = email.message_from_string(msg_string)

    for part in email_msg.walk():

        # Download only Excel File
        filetype = part.get_content_type()

        if(filetype == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'):
            #download

观点:

@q = Worker.ransack(params[:q])
@workers = @q.result.order(name: :asc).includes(:posts).uniq

2 个答案:

答案 0 :(得分:0)

除非您创建了自定义谓词开头,否则无效。 从您的group_by语句中我可以看到您的帖子有一个日期字段。如果您只想要指定日期的帖子,您将使用eq谓词

<%= f.search_field :posts_date_eq %>

如果你需要按摩你的用户输入,我会考虑制作一个自定义谓词,你可以在这看看如何做到这一点 - &gt; creating custom predicates

编辑

测试将日期字段字符串解析为日期放置

begin 
  params[:q][:posts_date_eq] = Date.parse(params[:q][:posts_date_eq])
rescue 
  # no param present 
end

在搜索对象之前

@q = Worker.ransack(params[:q])

答案 1 :(得分:0)

我解决了这个问题

而不是

<% worker.posts.group_by { |t| t.date.to_time.beginning_of_month }.each do |month, posts| %>

我做了

<% Post.search_post(params[:search_post]).search_post_present(params[:search_post_present]).where(worker_id: worker.id).order(date: :asc).group_by { |t| t.date.to_time.beginning_of_month }.each do |month, posts| %>

指向post.rb中的搜索提示器

def self.search_post(search_post)
  if search_post
    where('date LIKE ?', "%#{search_post}%")
  else
    all
  end
end

然后我重复了搜索和搜索的形式,因此两者都使用相同的提交按钮运行,并且工作得很好。