在Rails的查看页面上按配料数量对配方列表进行排序?

时间:2018-12-10 04:27:37

标签: ruby-on-rails sorting activerecord parameters

我的架构如下:

   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的{​​{1}}中有一些代码,这些代码从视图文件中获取了一些参数:

#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。这也可能是完全笨拙的方式。

1 个答案:

答案 0 :(得分:0)

是的,您可以根据这些成分找到数据

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