У меня есть переменная сеанса (user_id), которую я хотел бы включить в качестве внешнего ключа в записи, которую пользователь вставляет. У меня есть значения формы, которые проходят через форму, передаются в метод entity.update (params) моего контроллера без проблем, используя определение параметров по умолчанию. Этот код выглядитRails - ActionController :: Параметры включают значение контроллера с значениями формы
def brand_params
@brand_params = params.require(:brand).permit(:name, :brand_type, :profile_id)
end
Метод обновления выглядит
if @brand.update(brand_params)
format.html { redirect_to @brand, notice: 'Widget was successfully updated.' }
format.json { render :show, status: :ok, location: @brand }
else
format.html { render :edit }
format.json { render json: @brand.errors, status: :unprocessable_entity }
end
Теперь я хотел бы добавить в: profile_id переменную сеанса в @brand_params и после других потоков здесь, я попробовал метод сеттера:
def set_brand_params(key, val)
if @brand_params != nil
@brand_params[key] = val
end
end
Однако, называя это, @brand_params всегда равен нулю. Попытка напрямую добавить к хешу brand_params не работает, потому что это лучший метод. Если есть лучший способ встретить это (я бы предположил, общий) случай использования, я все уши! В противном случае я хотел бы знать, почему var всегда ноль, хотя в этом контексте, по крайней мере, метод brand_params считает его определенным и со значением. Я получил это решение в Adding a value to ActionController::Parameters on the server side
Вот метод обновления по запросу:
def update
puts "update"
set_brand_params("profile_id", session[:prof])
respond_to do |format|
if @brand.update(brand_params)
format.html { redirect_to @brand, notice: 'Widget was successfully updated.' }
format.json { render :show, status: :ok, location: @brand }
else
format.html { render :edit }
format.json { render json: @brand.errors, status: :unprocessable_entity }
end
end
end
Если вы используете 'set_brand_parmas' перед любым вызовом' brand_params' да, @brand_params не определен (ноль). –
Да, если я переместил переменную @brand_params в конструктор (здесь new()), это не ноль, так что это ответ! Я до сих пор неясно, насколько лучше, потому что теперь этот защищенный var является общедоступным ... но достаточно хорошим. –
Не могли бы вы отредактировать вопрос и добавить обновление всего метода? –