Ruby on Rails インスタンス変数にうまくデータが入れられません。

投稿者: Anonymous

うまくインスタンス変数にデータが入らず困っております。
下記のように、パラメータが送られindexアクションが行われる場合、@documentsが複数の時はエラーになってしまいます。
どのような方法で改善できるでしょうか。
しばらく調べましたが、解決できませんでした。
初学者のため、基本的な質問かと思いますが、誤りご指摘頂けますと幸いでございます。

Ruby 2.5.1
Rail 5.0.7.2


params{company_id: 1, user_id: 1}

controller.rb

def index
  @documents = Document.where(company_id: params[:company_id])
  @items = Item.find(@documents[:item_id])  #ここでエラーになっております。以下にすると一つ目のデータが取り出せます。 『@items = Item.find(@documents[0][:item_id])』
end

  
・usersテーブル
id
name

・companiesテーブル
id
name
user_id

・itemsテーブル
id
name
user_id

・documentsテーブル
id
name
company_id
item_id
user_id

解決

以下にすると一つ目のデータが取り出せます。 『@items = Item.find(@documents[0][:item_id])』

上記方式でデータが取り出せているので、

item_idが複数の場合は配列として渡すとよいと思います。 
下記のように map を使って配列を生成し、findに渡すとよいと考えます。

@items = Item.find(@documents.map(&:item_id))
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *