閲覧ありがとうございます!
ドリンクの個数からハッピーセットを検索したいのですが、多対多を使うと上手く実装できません。
前提
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---------- index.html.erb ------------ 2<%= search_form_for(@q, url: happysets_index_path, enforce_utf8: false) do |f| %> 3 <div class="form-group"> 4 <%= f.label :coke_and_drink_eq, 'コーラの個数を選んで' %> 5 <%= f.select :coke_and_drink_eq, @option, :include_blank => true %> 6 7 <%= f.submit %> 8 </div> 9 <% end %> 10 11--------- happyset.rb ------------- 12scope :coke, -> (drink_name = "coke") { 13 joins(:drinks).where('drink_name=?', drink_name) 14 } 15 16-------- HappysetsController -------- 17def index 18 @q = Happyset.ransack(params[:q]) 19 @happysets = @q.result(distinct: true).includes(:drinks, :happyset_drinks) 20 @option = [1,2,3,4,5,6,7,8,9] 21end
疑問1: 自分が作ったSQLは、どうやったらformの中に埋められるか?
予めscopeでドリンク名を指定し、そこにwhere(happyset_drinks.number=?, form-value)
を渡せば出来るかな?と思ったので、f.select :coke_and_drink_eq
、っとしてみたが出来ませんでした。andだと、Happyset.coke = 2
といったへんなSQLが発行されるから当たり前なのですが。。。。
ドリンク名を選択するセレクトボックス使えば、やりたいSQLを発行することがきたのですが、ドリンク名を選択せずにセットメニューを検索したいです。
疑問2: where等のSQL使った場合には、ActiveRecordは使えない?
ruby
1set = Happyset.where("happyset_name=?" ,"happyset1") 2set.happyset_name 3=> NoMethodError: undefined method id for <Happyset 4 5set = Happyset.find_by(happyset_name: "happyset1") 6set.happyset_name 7=> happyset1
オブジェクトで操作したい場合は、SQLを使わずにfind_by
を使わないと出来ないのですか?
よろしくお願い致します!
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/12 11:17
2017/10/12 12:48
2017/10/14 06:43