3

私はこの問題に数日間苦労しています。私は弁護士であり、法的助言を得るために Q&A タイプのサイトを作成しています (そうです、私は Rails の比較的初心者です :-))。

ユーザーが質問をカテゴリ (会社法、IP など) でフィルター処理してから、最新または人気順などで二次的に並べ替えられるようにしたいと考えています。

私は多くのアプローチを試しましたが、最終的に、最近、人気などでソートしようとしたときに、現在のカテゴリを別のパラメーターとして選択して渡す方法を見つけることができませんでした.

has_scopes gem を使い始めたばかりで、ドキュメントから「current_scopes」というメソッドがあることがわかりました。最近または人気のあるスコープを呼び出すことができるパラメーターとしてビューに current_scopes を渡す方法がうまくいかないようです。論理的には、 current_scopes をコントローラーの変数に割り当てる必要があると想定していますが、これをビューでパラメーターとして渡す方法がわかりません。

私の現在のコード:

post.rb

    has_many :comments, dependent: :destroy
    belongs_to :user, :counter_cache => true
    belongs_to :category, :counter_cache => true

    scope :recent,      ->{ order("created_at DESC")}
    scope :popular,     -> { order("comments_count DESC")}
    scope :unanswered,  -> {where(comments_count: 0)}
    scope :category, -> category_id {where(:category_id => category_id)}

posts_controller.rb

  has_scope :category 
  has_scope :recent, :type => :boolean
  has_scope :popular, :type => :boolean
  has_scope :unanswered, :type => :boolean

  def index
    @posts = @q.result.includes(:comments).order("created_at DESC") #@q comes from using Ransack gem and applying in the application controller
    @posts = apply_scopes(Post).all
    @scope = current_scopes

_sidebar.html.erb

    <h3>Filter by: </h3>
     <ul class="side-nav fixed" role="navigation" title="Link List">
       <li role="menuitem"><%= link_to "Show all", root_path %></li>
       <li role="menuitem"><%= link_to "Corporate", category: 1 %></li>
       <li role="menuitem"><%= link_to "Intellectual Property", category: 2 %></li>
       <li role="menuitem"><%= link_to "Employment", category: 3 %></li>
       <li role="menuitem"><%= link_to "Commercial", category: 4 %></li>
       <li role="menuitem"><%= link_to "Real Estate", category: 5 %></li>
       <li role="menuitem"><%= link_to "Venture Capital", category: 6 %></li>
     </ul>
    
    <h3>Sort by:</h3>
      <li> <%= link_to "Most Recent", :recent => true %> </li>
      <li> <%= link_to "Most Popular", :popular => true  %></li>
      <li> <%= link_to "Unanswered", :unanswered => true %></li>

この件に関するご支援に感謝いたします。

4

1 に答える 1