90336


ひとつはDog、もうひとつはRegistration_numberというmodelをそれぞれ以下のように作成してます。  
`dog.rb`

[code]

    class Dog < ApplicationRecord
      belongs_to :user
      has_many :registration_numbers, dependent: :destroy
     end
    # == Schema Information
    #
    # Table name: dogs
    #
    #  id            :bigint           not null, primary key
    #  name          :string           not null
    #  created_at    :datetime         not null
    #  updated_at    :datetime         not null
    #  user_id       :bigint           not null
    #
    # Indexes
    #
    #  index_dogs_on_user_id  (user_id)
    #
    # Foreign Keys
    #
    #  fk_rails_...  (user_id => users.id)
    #
    
[/code]

`registration_number.rb`

[code]

    class RegistrationNumber < ApplicationRecord
      belongs_to :dog
    end
    # == Schema Information
    #
    # Table name: registration_numbers
    #
    #  id                  :bigint           not null, primary key
    #  a                   :string          
    #  registration_number :string           not null
    #  created_at          :datetime         not null
    #  updated_at          :datetime         not null
    #  dog_id              :bigint           not null
    #
    # Indexes
    #
    #  index_registration_numbers_on_dog_id  (dog_id)
    #
    # Foreign Keys
    #
    #  fk_rails_...  (dog_id => dogs.id)
    #
    
[/code]

現状、Dogについてはcurrent_userに紐づいたものを`@dogs`として、RegistrationNumberについては、@dogsに紐づいたもので、aカラムの条件がAのものを@registration_numbersとしてそれぞれ以下のように取得してます。

[code]

    # @dogs
        @dogs = Dog.where(user_id: current_user.id)
    => #<ActiveRecord::Relation [#<Dog id: 1, name: ... , #<Dog id: 12, name: ... ]>
    
    # @registration_numbers
    @registration_numbers = []
        @dogs.each do |dog|
          registration_number = RegistrationNumber.where(dog_id: dog.id).merge(RegistrationNumber.where(a: 'A'))
          @registration_numbers += registration_number
    => [#<RegistrationNumber id: ... >, #<RegistrationNumber id: ... >]
    
[/code]

上記の通り、@dogsについては、ActiveRecord::Relation形式で、@registration_numbersは配列で取得しています。  
やりたいことは、`@dogs`に`@registration_numbers`中のカラムのひとつであるregistration_numberを結合して、  
`@dogs.registration_number`の記載でview上に表示できるようにしたいです。  
どのようにすればよいかちょっと検討がつかずに困っています。  
何かアイデアをご教授いただければ有り難いです。


CC BY-SA 4.0
2022-07-22T16:27:28.913
90152
2022-08-02T10:07:45.177
48234
question
ruby-on-rails rails-activerecord
Rails ActiveRecord::Relationと配列を結合したい


コメントから察するに以下のような事をやりたいのだと解釈しました。  
雑なサンプル考えたのでコメントではなく、回答欄に書きますね。

コントローラ

[code]

    @dogs = Dog.where(user_id: current_user.id)
    @registration_numbers = RegistrationNumber.where(dog_id: @dogs.ids)
    
[/code]

View

[code]

    @dogs.each do |dog|
      p dog
      @registration_numbers.select {|rn| dog.id == rn.dog_id}.each do |registration_number|
        puts registration_number
      end
    end
    
[/code]

ActiveRecord::Relationと配列を結合したいシーンはあまり一般的ではないかと思っています。


CC BY-SA 4.0
2022-08-02T10:07:45.177
90336
2022-08-02T10:07:45.177
7208
90152
answer