我有工人,工人有很多职位。我希望能够搜索一个工作人员,显示他的所有帖子,然后缩小到发布帖子的日期。我可以按工作人员的名字进行搜索,但是当我尝试搜索日期时,它只显示该工作人员的所有帖子(如果日期存在于一个帖子中)。
我试图与之合作:
控制器:
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
答案 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
然后我重复了搜索和搜索的形式,因此两者都使用相同的提交按钮运行,并且工作得很好。