読者です 読者をやめる 読者になる 読者になる

グロースエンジニアのブログ

プログラミングとウェブ解析をやっています。Googleアナリティクス好きなRuby on Rails エンジニアです!

【.build】って何? 〜RailsによるアジャイルWebアプリケーション開発 by Rails4〜

Rails

RailsによるアジャイルWebアプリケーション開発】って本を読んでます。

で、ちょっと分からない箇所があったので、復習用にメモしておきます。

【.build】ってのがわからない

P106 ページにある以下のコードが分からん。。。

def create
product = Product.find(params[:product_id])
@line_item = @cart.line_items.build(product: product) respond_to do |format|
if @line_item.save
format.html { redirect_to @line_item.cart,
notice: 'Line item was successfully created.' }
format.json { render action: 'show',
status: :created, location: @line_item }
else
format.html { render action: 'new' }
format.json { render json: @line_item.errors,
status: :unprocessable_entity }
end
end
end

before_actionで以下を実施しているので、@cartに入っているのはcart_id。(Cartモデルもidだけのもの)

module CurrentCart
extend ActiveSupport::Concern private def set_cart
@cart = Cart.find(session[:cart_id])
rescue ActiveRecord::RecordNotFound
@cart = Cart.create
session[:cart_id] = @cart.id
end
end

@line_item = @cart.line_items.build(product: product)
の部分が何をやっているのか分からない。

@cartにはcart_idだけが入っている。それにline_items.buildって何だろう?

Cartモデルは【has_many :line_items】になっているので、line_itemsモデルにproduct_idを追加している気もする。。

今後勉強していく中で、これが分かってくると思う!