###前提・実現したいこと
Railsでアソシエーションしている先の値を取得したいです。
具体的には下記のような構成になっています。
Event.rb
has_many :tickets
Ticket.rb
belongs_to :event
has_many :registers
has_many :users, through: :registers
User.rb
has_many :registers
has_many :users, through: :registers
Register.rb
belongs_to :user
belongs_to :ticket
ユーザーとチケットの間にRegisterという中間テーブルが存在し、取引時の情報が登録されることになっています。
やりたいこと:
1.イベントから見て、どのチケットを誰が買ったかを知りたい。
###発生している問題・エラーメッセージ
一つ一つやっていると配列の入れ子状態が激しく、よく分からなくなってしまっています。mapやpluckを駆使してもう少しすんなりとコードを書きたいです。
###該当のソースコード
現状は、まずイベントにチケットがあるかどうかを確認し、
あった場合は、チケット毎に取引(register)があるかを確認し、さらにそこから取り出したuser_idをUserから検索しているという、何とも初心者っぽいやり方をしています。。。
Ruby
1<% if @event.tickets.exists? %> 2 <% @event.tickets.each do |t| %> 3 <% if t.registers.exists? %> 4 <% t.registers.each do |r| %> 5 <% @user = User.find(r.user_id) %> 6 <%= r.name %>(<%= link_to @user.username, user_path(@user) %>) 7 <%= r.status_flg %> 8 <% end %> 9 <% end %> 10 <% end %> 11 <% end %> 12<% end %>
###試したこと
色々調べて、下記のやり方で、そのイベントが持っているチケットの取引をもう少し簡単に取得することができました。
っが、下記のコメントアウトしている部分はpluckが使えないというエラーが出てしまい、結局Userモデルからユーザー情報を取得するところまでは至っていません。
Ruby
1 @registers = @event.tickets.pluck(:id).map do |id| 2 Register.where(ticket_id: id,status_flg: 5) 3 end 4 5# @checkedinusers = @registers.pluck(:user_id,:name).map do |id,name| 6# [User.where(id: id),name] 7# end
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/26 05:53
2016/10/26 07:46
2016/10/26 08:07