首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Ruby-on-Rails过滤帖子

如何使用Ruby-on-Rails过滤帖子
EN

Stack Overflow用户
提问于 2015-02-10 01:20:00
回答 1查看 1.1K关注 0票数 0

我有一个工作列表项目设置,我想能够过滤几个过滤器。我希望能够有侧栏,可以过滤某些元素-:城市,:工作类型,和:合同类型

有没有一种简单的方法来创建单选按钮来显示用户可用的选项,例如:city可以勾选伦敦、曼彻斯特、布赖顿等的列表来显示这些特定的工作?

我是rails的新手,所以很难弄清楚我需要做什么,如果有人能解释我需要做什么,我会非常感激的!

我的代码如下:

index.html.erb -

代码语言:javascript
复制
<% @jobs.each do |job| %>
<div class="job">
    <h2><%= job.position %></h2>
    <p>Company: <%= job.company %></p>
    <p>Salary: <%= job.salary %></p>
    <p><a href="http://<%= job.companywebsite %>" target="_blank">Website: <%= job.companywebsite %></a></p>
    <p><a href="http://www.twitter.com/<%= job.companytwitter %>" target="_blank">Twitter: <%= job.companytwitter %></a></p>
    <p>Contract Type: <%= job.contract %></p>
    <p>City: <%= job.city %></p>
    <p>Expiry date: <%= job.expirydate %></p>
    <p>Job Type: <%= job.jobtype %></p>
    <p>Full Description:<br><br><%= job.description %></p>
    <p>How to apply: <%= job.apply %></p>
  </div>
<% end %>

job.rb -

代码语言:javascript
复制
class Job < ActiveRecord::Base
   validates :position, presence: true
   validates :company, presence: true
   validates :salary, presence: true
   validates :companywebsite, presence: true
   validates :companytwitter, presence: true
   validates :contract, presence: true
   validates :city, presence: true
   validates :expirydate, presence: true
   validates :jobtype, presence: true
   validates :description, presence: true
   validates :apply, presence: true
end

jobs_controller.erb -

代码语言:javascript
复制
class JobsController < ApplicationController
  def index
    @jobs = Job.page(params[:page]).per(25)
  end

  def new
    @job = Job.new
  end

  def create
    @job = Job.new(params.require(:job).permit(:position, :company, :salary, :companywebsite, :companytwitter, :contract, :city, :expirydate, :jobtype, :description, :apply ))
    if @job.save
      redirect_to root_path
    else
      render "new"
    end
  end
end

new.html.erb -

代码语言:javascript
复制
<%= simple_form_for @job, html: { multipart: true } do |form| %>
<%= form.input :position, input_html: { maxlength: 60 }, placeholder: "Job Position", label: false %>
<%= form.input :company, input_html: { maxlength: 60 }, placeholder: "Company name", label: false %>
<%= form.input :salary, input_html: { maxlength: 60 }, placeholder: "Salary", label: false %>
<%= form.input :companywebsite, input_html: { maxlength: 60 }, placeholder: "Company Website", label: false %>
<%= form.input :companytwitter, input_html: { maxlength: 60 }, placeholder: "Twitter Handle e.g @Hatch_Inc", label: false %>
<%= form.input :contract, input_html: { maxlength: 60 }, placeholder: "Contract Type", label: false %>
<%= form.input :city, input_html: { maxlength: 60 }, placeholder: "City", label: false %>
<%= form.input :expirydate, input_html: { maxlength: 60 }, placeholder: "Expiry date", label: false %>
<%= form.input :jobtype, input_html: { maxlength: 60 }, placeholder: "Job Type", label: false %>
<%= form.input :description, input_html: { maxlength: 60 }, placeholder: "Full job description", label: false %>
<%= form.input :apply, input_html: { maxlength: 60 }, placeholder: "How to apply", label: false %>
<%= form.button :submit %>
<% end %>
EN

回答 1

Stack Overflow用户

发布于 2015-02-10 05:09:48

下面是一个使用JQuery提交AJAX请求的示例(这样您的页面就不会在每次选中复选框时刷新)。在您的视图中,您可以为每个唯一的国家/地区创建一个复选框。Jquery将选择的国家/地区参数化,并将它们提交给您的控制器(指定您希望使用JavaScript进行响应)。Job模型中的作用域将应用该过滤器。

index.html.erb

代码语言:javascript
复制
<div id='job-list'>
 <% @jobs.each do |job| %>
<div class="job">
    <!-- Display your job here -->
  </div>
<% end %> 
</div>

<div id='countries'>
    <h4> Country Filter: </h4>
    <% @countries= Job.uniq.pluck(:country) %>
    <% @countries.each do |c| %>
        <br><input id="<%= c %>" type="checkbox" class="country-select" checked><label for="<%= c %>"> <%= c %> </label>
    <% end %>
</div>

index.js.erb

代码语言:javascript
复制
var jobs = $('#job-list');
jobs.empty();

<% @jobs.each do |job|%>
  jobs.append("<div class='job'><%= job %></div>"); // job display goes here
<% end %>

courses.coffee

代码语言:javascript
复制
getParams = ->
    params = ""
    countries = []
    $(".country-select:checked").each ->
      countries.push($(this).attr('id'))    
    params += "&#{$.param({countries: countries})}";

    return params

$('.country-select').on 'change', (event) =>    
  $.ajax "/jobs.js?"+getParams(),
    type: 'GET'
    dataType: 'script'

作业控制器

代码语言:javascript
复制
class JobsController < ApplicationController

  respond_to :html, :js

  def index
    @jobs = Job.page(params[:page]).per(25).by_country(params[:countries])
  end

end

作业模型

代码语言:javascript
复制
class Job < ActiveRecord::Base

  scope :by_country, -> (countries) { where(:country => (countries|| Course.uniq.pluck(:country)) ) }

end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28415506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档