[Ruby on Rails] 다른 테이블을 참조하여 id를 검색하고 외래 키로 데이터 삽입
실현하고 싶은 일
데이터를 삽입하는 테이블과는 다른 테이블의 정보를 참조해, 해당하는 데이터의 id를 외래 키로서 원의 테이블에 데이터를 추가한다
전제
테이블에는 생산량 데이터가 있는 Productions(생산량) 테이블과 제품 정보가 있는 Items(제품) 테이블이 있습니다. Productions 모델에는 id와 amount(생산량), Items 테이블과 연결하기 위한 Item_id가 있습니다. Items 테이블에는 id와 code(제품 코드)와 name(제품명)의 열이 있습니다. 또한 Goods 테이블에는 이미 제품 정보가 들어 있다고 가정합니다.
지금 시도하고있는 일
Productions 컨트롤러의 create 작업에서 Prodections 테이블에 생산량과 제품 정보를 추가합니다.
폼에서는 amount(생산량)와 Items 테이블의 code의 값을 입력하는 형태로 되어 있습니다(폼에서는 name을 Item_id로 하고 있습니다).
이때 amount(생산량)는 그대로 Productions 모델에 추가할 수 있지만 item_id는 외래 키이므로 당연히 그대로 입력할 수 없습니다. 따라서 입력된 값에서 Items 모델의 코드 정보를 참조하여 Items의 id를 Productions의 item_id에 추가합니다.
방법
우선 양식은 쉽게 이렇게 되어 있습니다.
index.html<%= form_for [@production], url: productions_path do |f| %>
<%= f.text_field :amount %>
<%= f.text_field :good_id %>
<%= f.submit '追加' %>
<% end %>
그리고 컨트롤러의 create 액션을 다음과 같이 씁니다.
controller/productions_controller.rbclass ProductionsController < ApplicationController
def create
item_id = Item.find_by(code: params[:production][:item_id]).id
Production.create(production_params.merge(item_id: item_id))
end
private
def production_params
params.require(:production).permit(:amount)
end
end
permit에서는 amount 만 허용하고 create 액션 내에서 find_by를 사용하여 item_id = Item.find_by(code: params[:production][:item_id]).id로 작성하고 Item 테이블에서 데이터를 찾습니다. , item_id에 다시 넣습니다.
그리고 create 액션을 할 때, item_id를 merge하는 것으로 외래 키로서 id의 값을 삽입할 수 있었습니다.
주의점
폼에서 form_for를 사용하고 있으므로, 값을 건네줄 때는 params[:production][:item_id]라고 써 봅시다. params[:item_id] 라고 쓰면 값이 전달되지 않고 오류가 발생합니다.
보충 정보
Rails 5.0.7.2
루비 2.5.1
Reference
이 문제에 관하여([Ruby on Rails] 다른 테이블을 참조하여 id를 검색하고 외래 키로 데이터 삽입), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/clora_ornitier/items/a6309e6089099e1763f0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
테이블에는 생산량 데이터가 있는 Productions(생산량) 테이블과 제품 정보가 있는 Items(제품) 테이블이 있습니다. Productions 모델에는 id와 amount(생산량), Items 테이블과 연결하기 위한 Item_id가 있습니다. Items 테이블에는 id와 code(제품 코드)와 name(제품명)의 열이 있습니다. 또한 Goods 테이블에는 이미 제품 정보가 들어 있다고 가정합니다.
지금 시도하고있는 일
Productions 컨트롤러의 create 작업에서 Prodections 테이블에 생산량과 제품 정보를 추가합니다.
폼에서는 amount(생산량)와 Items 테이블의 code의 값을 입력하는 형태로 되어 있습니다(폼에서는 name을 Item_id로 하고 있습니다).
이때 amount(생산량)는 그대로 Productions 모델에 추가할 수 있지만 item_id는 외래 키이므로 당연히 그대로 입력할 수 없습니다. 따라서 입력된 값에서 Items 모델의 코드 정보를 참조하여 Items의 id를 Productions의 item_id에 추가합니다.
방법
우선 양식은 쉽게 이렇게 되어 있습니다.
index.html<%= form_for [@production], url: productions_path do |f| %>
<%= f.text_field :amount %>
<%= f.text_field :good_id %>
<%= f.submit '追加' %>
<% end %>
그리고 컨트롤러의 create 액션을 다음과 같이 씁니다.
controller/productions_controller.rbclass ProductionsController < ApplicationController
def create
item_id = Item.find_by(code: params[:production][:item_id]).id
Production.create(production_params.merge(item_id: item_id))
end
private
def production_params
params.require(:production).permit(:amount)
end
end
permit에서는 amount 만 허용하고 create 액션 내에서 find_by를 사용하여 item_id = Item.find_by(code: params[:production][:item_id]).id로 작성하고 Item 테이블에서 데이터를 찾습니다. , item_id에 다시 넣습니다.
그리고 create 액션을 할 때, item_id를 merge하는 것으로 외래 키로서 id의 값을 삽입할 수 있었습니다.
주의점
폼에서 form_for를 사용하고 있으므로, 값을 건네줄 때는 params[:production][:item_id]라고 써 봅시다. params[:item_id] 라고 쓰면 값이 전달되지 않고 오류가 발생합니다.
보충 정보
Rails 5.0.7.2
루비 2.5.1
Reference
이 문제에 관하여([Ruby on Rails] 다른 테이블을 참조하여 id를 검색하고 외래 키로 데이터 삽입), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/clora_ornitier/items/a6309e6089099e1763f0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
<%= form_for [@production], url: productions_path do |f| %>
<%= f.text_field :amount %>
<%= f.text_field :good_id %>
<%= f.submit '追加' %>
<% end %>
class ProductionsController < ApplicationController
def create
item_id = Item.find_by(code: params[:production][:item_id]).id
Production.create(production_params.merge(item_id: item_id))
end
private
def production_params
params.require(:production).permit(:amount)
end
end
Rails 5.0.7.2
루비 2.5.1
Reference
이 문제에 관하여([Ruby on Rails] 다른 테이블을 참조하여 id를 검색하고 외래 키로 데이터 삽입), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/clora_ornitier/items/a6309e6089099e1763f0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)