IT

params [: something]에서 필드를 제거하는 방법

lottoking 2020. 8. 9. 09:16
반응형

params [: something]에서 필드를 제거하는 방법


사용자 모델의 양식 인 내 등록 양식은 회사의 홈페이지 값을 사용합니다. 하지만 사용자가 회사에 속하도록 변경했습니다. 따라서 회사의 개체를 사용자 모델에 전달해야합니다.

양식의 소유 값을 사용하여 회사의 개체를 소유하고 있습니다.

@user.company = Company.find_by_name(params[:company])

위의 내용이 작동하는 믿지만 호출 할 때 양식은 : company (문자열)를 모델에 전달합니다.

@user = User.new(params[:user])

따라서 사용자 모델에 전달하기 전에 : company 매개 변수를 제거하는 방법을 알고 싶습니다.


Rails 4 / 5- 수정 된 답변 (댓글 참조)

이 질문이 작성된 이후 레일 최신 버전이의 추출 을 추가했습니다 ! 그리고 예를 제외하고 :

new_params = params.except[the one I wish to remove]

이 매개 변수는 전달 된 원본을 파괴하지 않고 필요한 모든 매개 변수를 사본으로 '잡아'더 안전한 방법입니다 (시간이 지남에 코드의 요구 및 유지 관리를 매우 어렵게 만들기 때문에 좋은 일이 아닙니다).

또는 복사하지 않고 직접 수 있습니다. 예 :

@person.update(params[:person].except(:admin))

extract!더주의하여 사용하도록 원본을 수정합니다 (! 쾅 연산자가 있습니다)!

원래 답변

다음을 사용하여 해시에서 키 / 값 쌍을 제거 할 수 있습니다 Hash#delete.

params.delete :company

params [: user]에 포함 된 경우 다음을 사용합니다.

params[:user].delete :company

아마도 해시를 제외하고.

class MyController < ApplicationController
  def explore_session_params
    params[:explore_session].except(:account_id, :creator)
  end
end

두 가지 작업을 수행합니다. 한 번에 둘 이상의 키를 제외 할 수 있으며 원래 해시를 수정하지 않습니다.


이를 달성하는 올바른 방법은 strong_params

class UsersController < ApplicationController
  def create
    @user = User.new(user_params)
  end

  private

  def user_params
    params.require(:user).permit(:name, :age)
  end
end

이렇게하면 모델에 구독하는 변수를 더 많이 제어 할 수 있습니다.


respond_to do |format|
  if params[:company].present?
    format.html { redirect_to(:controller => :shopping, :action => :index) }
  else
    format.html
  end
end

이 URL에서 변수를 제거합니다.

참고 URL : https://stackoverflow.com/questions/5150676/how-to-remove-a-field-from-paramssomething

반응형