閲覧ありがとうございます!
いくら探しても、問題が解決できないのでよろしくお願いいたします!
前提
ruby:2.4.1
rails 5.0.2
Happyset table | Happyset_drink table | Drink table |
---|---|---|
happyset_name | happyset_id | drink_name |
drink_id | ||
quantity |
ruby
1------------- Appication Record -------------- 2class Happyset < ApplicationRecord 3 has_many :happyset_drinks 4 has_many :drinks, through: :happyset_drinks 5 6 scope :coke, -> { joins(:happyset_drinks, :drinks).select("happysets.*, happyset_drinks.*, drinks.*").where("drink_name=?", "coke")} 7 8 class << self 9 def ransackable_scopes(auth_object = nil) 10 [:coke] 11 end 12 end 13end 14 15class HappysetDrink < ApplicationRecord 16 belongs_to :happyset 17 belongs_to :drink 18 19end 20 21class Drink < ApplicationRecord 22 has_many :happyset_drinks 23 has_many :happysets, through: :happyset_drinks 24end 25 26-------------- Controller ----------------- 27class HappysetsController < ApplicationController 28 def index 29 @q = Happyset.ransack(params[:q]) 30 @happysets = @q.result 31 end 32end 33 34------------- Seeds.rb ------------------- 35Drink.create(drink_name: "coke") 36Drink.create(drink_name: "sprite") 37Drink.create(drink_name: "orange") 38Drink.create(drink_name: "water") 39 4030.times do |n| 41 Happyset.create(happyset_name: "happyset#{n}") 42 HappysetDrink.create(happyset_id: n, drink_id:1 ,quantity:rand(6)) 43 HappysetDrink.create(happyset_id: n, drink_id:2 ,quantity:rand(6)) 44 HappysetDrink.create(happyset_id: n, drink_id:3 ,quantity:rand(6)) 45 HappysetDrink.create(happyset_id: n, drink_id:4 ,quantity:rand(6)) 46end
最終的には、ハッピーセット名の検索やドリンクの個数からハッピーセット名を検索したいです。
問題点:Happyset.ransack(coke)がerrorになってしまう。
Happyset.rbにコーラを有しているtableを表示出来るようにscopeを使用してみました。
console
1>> Happyset.coke 2SELECT happysets.*, happyset_drinks.*, drinks.* FROM "happysets" 3INNER JOIN "happyset_drinks" ON "happyset_drinks"."happyset_id" = "happysets"."id" 4INNER JOIN "happyset_drinks" "happyset_drinks_happysets_join" ON "happyset_drinks_happysets_join"."happyset_id" = "happysets"."id" 5INNER JOIN "drinks" ON "drinks"."id" = "happyset_drinks_happysets_join"."drink_id" 6WHERE (drink_name='coke') 7 8>> Happyset.ransack(coke) 9NameError: undefined local variable or method `coke' for main:Object 10
ransackの変数のスコープ範囲がおかしいから、Name Errorが出るのかな?と思い、ransackable_scopesをいろいろな書き方を試してみたのですが出来ませんでした。
よろしくお願いいたします!
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/06 08:23