Ответ 1
Вы можете удалить пару ключ/значение из хеша с помощью Hash#delete
:
params.delete :company
Если он содержится в параметрах [: user], вы должны использовать это:
params[:user].delete :company
Моя форма регистрации, которая является формой для модели Users, берет строковое значение для компании. Однако я только что внес изменения, так что пользователи принадлежат к компаниям. Поэтому мне нужно передать объект компании в модель Пользователи.
Я хочу использовать строковое значение из формы для получения объекта компании:
@user.company = Company.find_by_name(params[:company])
Я считаю, что вышеизложенное работает, однако форма передает: company (которая является строкой) в модель, когда я вызываю:
@user = User.new(params[:user])
Поэтому я хочу знать (и не могу найти, как) удалить параметр: company, прежде чем передавать его в модель User.
Вы можете удалить пару ключ/значение из хеша с помощью Hash#delete
:
params.delete :company
Если он содержится в параметрах [: user], вы должны использовать это:
params[:user].delete :company
Вероятно, вы должны использовать hash.except
class MyController < ApplicationController
def explore_session_params
params[:explore_session].except(:account_id, :creator)
end
end
Он выполняет 2 вещи: позволяет одновременно исключать более одного ключа и не изменять исходный хэш.
respond_to do |format|
if params[:company].present?
format.html {redirect_to(:controller=>:shopping, :action=>:index)}
else
format.html
end
это приведет к удалению параметров из URL
Правильный способ достижения этого - использовать 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
Таким образом, у вас есть больший контроль над тем, какие параметры должны быть переданы модели