ProgramingTip

Rails 4 : 매개 변수에 속성 ​​삽입

bestdevel 2020. 11. 16. 21:57
반응형

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

반응형