У меня есть form
, который передает массив моему контроллеру в параметрах, и он продолжает вызывать ActiveModel::ForbiddenAttributesError
. Моя функция create
вызывает другую функцию для исправления этих параметров массива и объединения частей в строку, но я думаю, что слишком поздно в этот момент.Rails 4: Params with hash
Params
{ "remote"=>
{ "name"=>"",
"start_date"=>"9/27/2016",
"email"=>"",
"allergies"=>["Peanuts", "Soy Protein", "Dairy", ""],
}
}
Контроллер
def create
new_params = fix_params(params, ["allergies"])
remote_params = new_params["remote"]
@remote = Remote.new(remote_params)
respond_to do |format|
if @remote.save
format.html { redirect_to root_path, notice: 'Remote was successfully created.' }
format.json { render :show, status: :created, location: @remote }
else
format.html { render :new }
format.json { render json: @remote.errors, status: :unprocessable_entity }
end
end
end
def fix_params(params, fields)
fields.each do |field|
to_change = params[:remote][field]
new_param = to_change.join(", ").strip()
params[:remote][field] = new_param || ""
end
return params
end
Может быть, есть лучший способ передать эти переменные?
'ActiveModel' ошибка будет предложить что-то в модели блокирует это. Не могли бы вы также опубликовать это? Кроме того, зачем вам нужен метод 'fix_params', чего вы пытаетесь достичь? Несомненно, это более жёсткий путь. – Matt
Вы правы, это было из-за модели, и мне жаль, что я не мог по-другому выполнить то, что я делаю в 'fix_params'. Функция в основном принимает массив параметров и объединяет их в строку –
. В вашей модели есть лучший способ сделать это: определить настраиваемую настройку def allergies = (значение) do self [: allergies] = value.is_a? (Array)? value.join (',') .strip: значение end. модель будет фиксировать значение в любое время, когда вы его установили. – arieljuod