제품 기능 실장에 작용하는fieldsfor

처음 뵙겠습니다.
현재 프로그래밍 학교에서 메일 사본을 만드는 사이트를 만들고 있다.
나는 A반에 속해 쓰레기 처리 전문가로 일하고 있다.
다른 블로그 전에 기사를 썼는데 이번에 쓸 때 잘 못 쓴 부분이 있어서 Qita로 투고하기로 했다.
이번엔 오늘까지 전시 작품 기능실장 새로 배운 필드입니다.for에 대해 쓰다.

추기


ancestry에 대한 보도 생성

컨디션


Rails 5.2.3

출품 기능을 통해 배운 것


출품 기능은 입력한 값을 데이터베이스에 저장해야 한다.
메르칼리의 출품 화면에 필요한 프로젝트 A반은 다음과 같은 몇 부분으로 나뉜다.
·Items표(상품정보 저장)
상품명·상품의 설명·사이즈·상품의 상태·셀러id(전시된user의 id)·buyerid(구매한 user id)·brandid shipmentid 가격
seller_id、buyer_id링크된 글 참조 정보
· Brands 표 (브랜드 정보 저장)
브랜드 이름
·Shipments표(배송정보 저장)
배송비 부담, 배송 방법, 발송원 지역(prefecture id), 발송 전 일수
• Categories 테이블 (분류 이름 저장)
분류명·ancestry(아래 글에서 설명할 예정)
・Itemscategories 탁자 (중간 탁자)
item_id categoryid
이미지 Active 정보Storage를 사용하여 저장하는 중입니다.
위의 표에 값을 저장하는fieldsfor는 유용하다.

fields_for를 통해 다른 모델에 저장


방금 열거한 표에 값을 저장하기 위해서는 출품 화면을 만드는 보기에서 다른 모델의 값을 저장할 수 있음을 지시해야 한다.
이를 위해 사용된 것은 fields_for fields_for는 관련 등 링크를 통해 모델을 입력하여 등록하고 업데이트하는 방법입니다.
이 보도가 참고가 됐다.
사용하기 위해서는 모형 컨트롤러를 기술해야 한다.

모델 기술


Item 테이블의 모델 Item입니다.rb를 예로 들어 설명하다.
Item.rb에서fieldsfor를 사용하기 위해 다음과 같은 기술을 했습니다.
(app/models/item.rb)
 accepts_nested_attributes_for :shipment
 accepts_nested_attributes_for :brand
 has_many :items_categories
 has_many :categories, through: :items_categories
요점은 accepts_nested_attributes_for가 지정한 곳이다.
이 기술을 통해shipment,brand,itemscategory는 책상과 연결될 수 있습니다.
items_category has매니의 관계이기 때문에 여러 가지 형식으로 쓰는데shipment와 brand는 각각has이다one、belongs_to 관계이기 때문에 단수 형식으로 씁니다.

Controller 기술


Controller도 fieldsfor 사용을 지정해야 합니다.
item을 만드는 new 동작에서 다음과 같다.

(app/controllers/items_controller.rb)
def new
 @item = Item.new
 @parents = Category.all.order("id ASC").limit(13)
 @item.build_shipment
 @item.build_brand
end
요점build.이 기술을 통해 new 동작에서fieldsfor를 기술할 수 있습니다.
has_원 하고 블링스.to는build를 사용할 수 없기 때문에build모델명으로서
또한 플래시 매개변수 내의 모델 이름attributes로 지정해야 합니다.
permit에서create 동작으로 방법을 가져오면 입력한 값을 저장할 수 있습니다.

(app/controllers/items_controller.rb)

def create
 @item = Item.new(item_params)
 if @item.save!
   shipment_id = Shipment.find(@item.id).id #Shipmentテーブルのidを取り出す
   item = Item.find(@item.id)               #作成したItemのidを取り出す
   item.update(shipment_id: shipment_id)  #Itemテーブルにshipment_idのカラムを入れる
   redirect_to root_path
 else
   redirect_to new_item_path
 end
end

def item_params
  params.require(:item).permit(:name, :size, :description, :price, :item_status, 
 shipment_attributes: [:id, :cost_payer, :method, :days, :prefecture_id],images: [], 
 brand_attributes: [:id, :name], category_ids: []).merge(seller_id: current_user.id)
end

view의 기술


기술량이 적은 브랜드 모델로 설명하다.
fields_for를 사용하면 다음과 같은 기술이 됩니다.

(app/views/items/new.html.haml)
.form-group.brand--container
 = f.fields_for :brand do |brand|
   = brand.label "ブランド"
   %span.form-require-gray 任意
   %div
     = brand.text_field :name, placeholder: "例)シャネル", value: "", class: "input-default"
fields_for: brand에서 brand 모델 지정하기,text필드에name열을 지정하면 브랜드 테이블에name의 값을 저장할 수 있습니다.
실제 화면은 이렇다.

여기에 브랜드의name을 입력하면 데이터베이스에 저장할 수 있습니다.

후기


팀 개발 2차 단거리 검사 종료
이번 주 금요일 세 번째 단거리 심사에 앞서 팀은 필요한 모든 프로젝트를 실시하는 것을 목표로 개발 중이다.
6/3~6/9 사이에 전원이 모이는 날은 3일밖에 안 된다.
그럼에도 불구하고 순조롭게 진행되어 나는 좋은 멤버들의 도움을 받았다고 생각한다.
만약 본 보도의 내용에 잘못된 점이 있다면 저에게 알려 주십시오.
잘 부탁드립니다.

좋은 웹페이지 즐겨찾기