У меня есть модель, как это:Как избежать создания некоторого атрибута в методе создания контроллера?
class Url < ApplicationRecord
validates ...
before_create :generate_number
def generate_number
self.number = a random value
end
end
и метод create()
в контроллере:
def create
@url = Url.new(url_params)
respond_to do |format|
if @url.save
format.html { redirect_to @url, notice: 'Url was successfully created.' }
format.json { render :show, status: :created, location: @url }
else
format.html { render :new }
format.json { render json: @url.errors, status: :unprocessable_entity }
end
end
end
Моя БД имеет только два поля: given_url
и number
. Теперь, когда я перехожу на страницу new
, есть 2 формы ввода для given_url
и number
. Но я хочу, чтобы number
принимал значение от generate_number
, а не от формы. Как я могу это сделать?
Или, более конкретно, есть способ сделать способ generate_number
переопределить вход пользователя после того, как приложение уже получает значение от входа пользователя?
Сначала вы можете удалить входные данные из формы, если вас не интересует вход пользователя. Затем вам нужно удалить поле из белого списка сильных параметров. Но на самом деле: поскольку 'generate_number' всегда вызывается перед созданием, он все равно будет переопределять вход пользователя. – Wukerplank
Есть ли способ заставить метод generate_number переопределять ввод пользователя после того, как приложение уже получает значение от входа пользователя? –
вы можете использовать 'after_create' для этого. каждый раз, когда вы отправляете форму, пользовательский ввод переопределяет ваше случайное значение 'generate number' –