Сортировка списка рецептов по количеству ингредиентов на странице просмотра в Rails? - PullRequest
0 голосов
/ 10 декабря 2018

Моя схема выглядит следующим образом:

   create_table "ingredients", force: :cascade do |t|
    t.string "name"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  create_table "recipe_ingredients", force: :cascade do |t|
    t.integer "recipe_id"
    t.integer "ingredient_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  create_table "recipes", force: :cascade do |t|
    t.string "name"
    t.integer "user_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

На моей индексной странице я хотел бы перечислить все рецепты, а затем либо иметь ссылку, либо кнопку, которая сортирует рецепты по количеству ингредиентов, которые есть у каждого рецепта.,Я играю с этим уже пару часов и становлюсь ближе, но, будучи новичком, мой мозг не совсем делает скачок.Прямо сейчас у меня есть некоторый код в RecipesController в #index, который принимает некоторые параметры из файла представления:

  <%= button_to "sort by ingredient amount", {:controller => "index", :action => "update", :order => true}, :method=>:post  %>

код в контроллере до сих пор выглядит примерно так:

  def index
    if params[:order] = true
      Recipe.all.each do |r|
        r.ingredients.each do |i|
          ???
        end
      end
    else
      @recipes = Recipe.all 
    end
  end

Я не уверен, как использовать .order при доступе к ассоциации, такой как recipes_ingredients.. Это также может быть совершенно нелепым способом сделать это.

1 Ответ

0 голосов
/ 10 декабря 2018

Да, вы можете найти данные на основе таких ингредиентов, как эти

def index
  if params[:order] = true
    Recipe.left_joins(:ingredients).group(:id).order('COUNT(ingredients.id) DESC')
  else
    @recipes = Recipe.all 
  end
end
...