如何在Ruby on Rails中构建的页面上过滤结果

时间:2015-03-02 14:51:56

标签: ruby-on-rails ruby-on-rails-4

我有一堆艺术品。我希望只能展示出售的那些艺术品(这是我表中的一栏,:可用性='私人收藏')。我该怎么做?这是我到目前为止所尝试的: 创建'已售出'在artwork_controller.rb中的操作:

  def index
    if params[:tag] 
      @artworks = Artwork.tagged_with(params[:tag])
    elsif params[:series]
      @artworks = Artwork.tagged_with(params[:series])
    elsif params[:availability]
      @artworks = Artwork.where(availability: 'Private collection')
    else
      @artworks = Artwork.all
    end
  end

  def sold
    @artworks = Artwork.where(availability: 'Private collection')
  end

routes.rb中:

get 'sold' => 'artworks#index', :as => 'sold'

我知道我的作品被标记为这些单独的选项,并且它们在我的展示页面上正确显示(这是我的表单):

<%= f.input :availability, :collection => ['Available for purchase','Private collection','Not for sale'],  :as => :radio_buttons %>

所有这些似乎都没有破坏任何东西,但它也不允许我只看到那些在我到达http://localhost:3000/sold时出售的艺术品。我做错了什么?

1 个答案:

答案 0 :(得分:2)

目前路由到文章索引:

get 'sold' => 'artworks#index', :as => 'sold'

因此,它在索引操作中使用您的查询,并且没有params它会获得所有这些。因此,您需要将其路由到已售出的操作:

get 'sold' => 'artworks#sold', :as => 'sold'

然后在您的控制器中,您可以告诉rails渲染索引视图

def sold
  @artworks = Artwork.where(availability: 'Private collection')
  render :index
end

将使用索引视图,但使用已售出操作的查询。