#javascript #ruby-on-rails
#javascript #ruby-on-rails
Вопрос:
Я продолжаю получать это сообщение #<ActionController::ParameterMissing: параметр отсутствует или значение пустое: свойство>, и просто не знаю, как разрешить все исследования, которые я провел, и сравнил свою работу.
Я думаю, что у меня правильно настроено действие создания
def create
raise params.inspect
@property = Property.create(prop_params)
if @property.save!
render json: @property
else
render json: { error: "Couldn't save"}
end
end
def prop_params
params.require(:property).permit(:address, :state, :sale_price, :owner_id)
end
Вот и моя модель для свойств.
class Property < ApplicationRecord
belongs_to :owner
end
Когда я повышаю param.inspect, я получаю это
Object { status: 500, error: "Internal Server Error", exception: "#<RuntimeError: <ActionController::Parameters {"controller"=>"properties", "action"=>"create"} permitted: false>>", traces: {…} }
Я знаю, что он должен показывать то, что я передал, но в какой-то момент он просто перестает показывать то, что я передал, и просто начал показывать контроллер и действие.
Как мне отправить форму во внешнем интерфейсе?
listForm.addEventListener('submit',(event) =>{
event.preventDefault();
const property = {
address: document.getElementById('address').value,
state: document.getElementById('state').value,
sale_price: document.getElementById('sale_price').value,
owner_id: document.getElementById('owner_id').value,
}
const listObj = {
method: 'POST',
header: {
'Content-Type': 'application/json',
"Accept": "application/json"
},
body: JSON.stringify(property)
}
fetch(PROPERTIES_URL, listObj)
.then(res => res.json())
.then((list_data) => {
let new_listing = renderListing(list_data)
listings.append(new_listing)
listForm.reset()
console.log(list_data)
})
})
Как я могу устранить это препятствие из-за моей сильной проблемы с параметрами?
Ответ №1:
Ошибка, которую вы получаете, является результатом того, насколько сильные параметры работают в Rails.
params.require(:property).permit(:address, :state, :sale_price, :owner_id)
Приведенная выше строка сообщает Rails, что вы хотели бы получить свои параметры в этой форме:
{
property: {
address: "123 city st",
state: "NSW",
sale_price: 100.00,
owner_id: 1
}
}
Обратите внимание, что часть require(:property) сообщает Rails, что параметры, которые вы хотите получить, должны иметь ключ «свойство». Внутри ключа свойства вы указываете ему разрешить остальные ключи (:address, :state, :sale_price, :owner_id).
Самое простое решение исправить ваш код — просто изменить тело, которое вы отправляете из интерфейса, чтобы оно соответствовало требуемому формату, изменив эту строку:
// Before
body: JSON.stringify(property)
// After
body: JSON.stringify({ property })
Вы можете прочитать больше о строгих параметрах здесь .
Комментарии:
1. К сожалению, это приложение проклято, потому что у меня это не сработало. Но это имело смысл так, как вы это объяснили. Кто-то еще намекал на то же самое в какой-то момент. Я все еще продолжаю получать сообщение