我已经尝试过像this这样的解决方案,但我是Rails的初学者,只是在完成Pragmatic Studio Rails I & II Course之后构建我的第一个应用
基本上,我想建立一个像BookYogaRetreats.com这样的简单列表网站 我试图找出如何实现过滤器逻辑。到目前为止,我有一个列表模型,类别和&分类。
清单模型:
has_many :categorizations, dependent: :destroy
has_many :categories, through: :categorizations
has_attached_file :image, styles: { :medium => "200x200#" }
validates_attachment_content_type :image, content_type: /\Aimage\/.*\Z/
validates :title, presence: true, uniqueness: true
paginates_per 15
scope :by_category, lambda { |category| includes(:categories).where(:categories => { :name => category }) }
分类模型:
belongs_to :listing
belongs_to :category
分类模型:
has_many :categorizations, dependent: :destroy
has_many :listings, through: :categorizations
我的列表控制器索引操作看起来像这样(我已经进行了很多实验......)
class ListingsController < ApplicationController
before_action :find_listing, only: [:show, :edit, :update, :destroy]
before_action :authenticate_user!, except: [:index, :show]
before_filter :load_data, only: [:index]
def index
@listings = @listings.includes(:categories).where(categories: { id: @category}) if @category_ids
@listings = @listings.page(params[:page])
respond_to do |format|
format.js
format.html
end
end
在我的jumbotron partial中,包括过滤器下拉列表,我有以下内容:
<div class="col-sm-6 col-md-4">
<%= select_tag("listing[category_id]", options_from_collection_for_select(@categories, "id", "name") , { :prompt => 'Select a Category' }) %>
<%= submit_tag nil, class: "form_submit", method: "get" %>
</div>
我的listing / index.html.erb看起来像这样:
<% @listings.each_slice(3) do |listings|%>
<div id="listings">
<div class="row">
<% listings.each do |listing|%>
<div class="col-md-4">
<div class="listing">
<div class="image_wrapper">
<%= link_to listing do %>
<%= image_tag listing.image.url(:medium) %>
<% end %>
<h2><%= link_to listing.title, listing %></h2>
<p><%= listing.start_date %> - <%= listing.end_date %></p>
</div>
</div>
</div>
<% end %>
</div>
</div>
过去两天我试图找出一些东西,一直在试验Filterific Gem和Ransack。我真的不想使用宝石,目前我不明白我需要做什么。我可以使用类别过滤器,点击提交按钮后会重新加载显示属于该特定类别的所有列表的页面?拥有has_many通过关系可能不会让它变得更容易。
我希望能够拥有类似商品的内容吗?by_category = seminars,然后重新加载商品详情视图index.html.erb,并仅显示包含类别研讨会的商品详情。
我可能在这里完全走错了路。任何指针都将非常感谢。非常感谢。
答案 0 :(得分:1)
管理在这里找到解决方案:
我的观点:
<%= form_tag listings_path, :controller => 'listings', :action => 'index', :method => 'get', :id => "category_select" do %>
<%= collection_select( nil, :category_id, Category.all, :id, :name, { :include_blank => 'All Categories'} , { :class => 'form-control' }) %>
<%= submit_tag nil, class: "form_submit" %>
<% end %>
我的控制器索引操作:
@listings = Listing.includes(:categorizations).page(params[:page])
if params[:category_id].blank?
@listings
else
@category_id = Category.find_by(id: params[:category_id])
@listings = @category_id.listings
end
respond_to do |format|
format.js
format.html
end
这将允许我使用/ listings?category_id = 5并解决问题。如果您有更优雅的提示,请告诉我。