반응형
Rails 4 : 매개 변수에 속성 삽입
Rails 3에서는 다음과 같이 매개 변수에 속성을 삽입 할 수 있습니다.
params[:post][:user_id] = current_user.id
Rails 4에서 작업을 시도하고 계획이 없습니다.
post_params[:user_id] = current_user.id
. . . .
private
def post_params
params.require(:post).permit(:user_id)
end
Rails는이 삽입을 무시합니다. 오류가 발생하지 않고 조용히 실패합니다.
여기 에서 답을 찾았습니다 . 컨트롤러 작업 내에서 속성을 삽입하는 대신 병합을 사용하여 변수 정의에 삽입 할 수 있습니다. 이전 예제를 확장 비용 :
private
def post_params
params.require(:post).permit(:some_attribute).merge(user_id: current_user.id)
end
@timothycommoner의 답변 외에도 작업 병합을 수행 할 수도 있습니다.
def create
@post = Post.new(post_params.merge(user_id: current_user.id))
# save the object etc
end
private
def post_params
params.require(:post).permit(:some_attribute)
end
이 경우에 대한 대안으로 다음을 통해 속성 전달을 요구할 수 있습니다 scope
.
current_user.posts.create(post_params)
Rails 5 속성 해시에서 중첩 된 속성을 추가 / 편집하는 방법을 알아 내려고한다면 가장 간단한 (대체) 접근 방식이라는 것을 알았습니다. merge 또는 deep_merge에 신경 쓰지 ... 이 예에서는 저장하기 전에 group_id 및 vendor_id를 관련 송장 (중첩 된 매개 변수)에 복사해야합니다.
def create
my_params = order_params
@order = Order.new
@order.attributes = my_params
@order.invoice.group_id = my_params[:group_id]
@order.invoice.vendor_id = my_params[:vendor_id]
@order.save
end
private
# Permit like normal
def order_params
params.require(:order).permit([:vendor_id, :group_id, :amount, :shipping,:invoice_attributes => [:invoice_number, :invoice_date, :due_date, :vendor_id, :group_id]])
end
참고 URL : https://stackoverflow.com/questions/16530532/rails-4-insert-attribute-into-params
반응형
'ProgramingTip' 카테고리의 다른 글
node.js가 한 번에 6 개의 요청 만 처리하는 이유는 무엇입니까? (0) | 2020.11.16 |
---|---|
m2e-wtp 오류 : (0) | 2020.11.16 |
Postman으로 POST 매개 변수를 강력히 사용하지 않습니다. (0) | 2020.11.16 |
Android Studio- 프로젝트의 모든 파일 이름이 빨간색이지만 오류가 없습니다. (0) | 2020.11.16 |
삭제 된 Jupyter 노트북 셀을 복구하는 방법은 무엇입니까? (0) | 2020.11.16 |