Как удалить поле из параметров [: something]

Моя форма регистрации, которая является формой для модели Users, берет строковое значение для компании. Однако я только что внес изменения, так что пользователи принадлежат к компаниям. Поэтому мне нужно передать объект компании в модель Пользователи.

Я хочу использовать строковое значение из формы для получения объекта компании:

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

Я считаю, что вышеизложенное работает, однако форма передает: company (которая является строкой) в модель, когда я вызываю:

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

Поэтому я хочу знать (и не могу найти, как) удалить параметр: company, прежде чем передавать его в модель User.

Ответ 1

Вы можете удалить пару ключ/значение из хеша с помощью Hash#delete:

params.delete :company

Если он содержится в параметрах [: user], вы должны использовать это:

params[:user].delete :company

Ответ 2

Вероятно, вы должны использовать hash.except

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

Он выполняет 2 вещи: позволяет одновременно исключать более одного ключа и не изменять исходный хэш.

Ответ 3

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

это приведет к удалению параметров из URL

Ответ 4

Правильный способ достижения этого - использовать 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

Таким образом, у вас есть больший контроль над тем, какие параметры должны быть переданы модели