Я провел полтора дня, просматривая все подобные вопросы, но ни один из них не решил мою текущую проблему.
У меня есть простая форма, которая отображает форму javascript, и я получаю: ActionController :: ParameterMissing (параметр отсутствует или значение пусто: ссылка): всякий раз, когда я пытаюсьотправить форму.Я попытался использовать fetch вместо require в моих параметрах, но это не исправляет (не регистрирует ошибку, но и ничего не сохраняет).
Я перепробовал все, что мог придумать, и сейчас растерялся.Я использовал унаследованный пример кода для настройки формы, так что по сути это тот же формат, что и формы, которая работает, поэтому я действительно не знаю, чего мне не хватает.
Я отображаю форму вчастично, поэтому в моих взглядах у меня есть:
просмотров / домовладельцев / приборной панели / show.html.erb
<%= render "homeowners/dashboard/referrals" %>
<div class="refer-resident-form hidden">
<%= render 'referral_form' %>
</div>
просмотров / домовладельцев / приборной панели/referrals.html.erb
<div class="card article branded-border">
<div class="refer-overlay">
<div class="card-content refer-summary">
<p class="larger"><%= t(".refer_developer") %></p>
<p><%= t(".refer_description") %></p>
<div class="refer-button">
<%= button_tag t(".refer"), class: "btn branded-btn refer-resident",
data: { cancel: t("edit.cancel"),
cta: t(".send_invitation"),
title: t(".refer")} %>
</div>
</div>
</div>
</div>
просмотров / домовладельцев / приборной панели / _referral_form.html.erb
<div class="refer-description">
<h4><%= t(".refer_description") %> </h4>
</div>
<%= simple_form_for @referral, url: homeowner_dashboard_path, remote: true do |f| %>
<%= f.input :referee_first_name, label: t(".first_name"), required: true %>
<%= f.input :referee_last_name, label: t(".last_name"), required: true %>
<%= f.input :referee_email, label: t(".email"), required: true %>
<%= f.hidden_field :referrer_name, value: (current_resident.first_name + " " + current_resident.last_name) %>
<%= f.hidden_field :referrer_email, value: current_resident.email %>
<%= f.hidden_field :referral_date, value: Time.now %>
<% end %>
Мой контроллер контроллеры/homeowners/referrals_controller.rb
module Homeowners
class ReferralsController < Homeowners::BaseController
def create
create_new_referral
end
private
def create_new_referral
@referral = Referral.new(referral_params)
redirect_to root_path
end
# Never trust parameters from the scary internet, only allow the white list through.
def referral_params
params.require(:referral).permit(
:referee_first_name, :referee_last_name, :referee_email, :referral_date,
:referrer_name, :referrer_email
)
end
end
end
И мой файл javascript refer.js (пожалуйста, помните, что я ничего не знаю о javascript и по сути скопировал этот код из другой формы, просто внося незначительные изменения, чтобы сделать это актуальным)
(function (document, $) {
'use strict'
$(document).on('click', '.refer-resident', function (event) {
var dataIn = $(this).data()
var $referContainer = $('.refer-resident-form')
$('body').append($referContainer)
var $form = $('.refer_resident')
$referContainer.dialog({
show: 'show',
modal: true,
width: 700,
title: dataIn.title,
buttons: [
{
text: dataIn.cancel,
class: 'btn',
click: function () {
$(this).dialog('destroy')
}
},
{
text: dataIn.cta,
class: 'btn-send btn',
id: 'btn_submit',
click: function () {
// Clear any old messages before the post
$('.flash').empty()
$.post({
url: '/homeowners/referral',
data: $form.serialize(),
dataType: 'json',
success: function (response) {
var $responseP = document.createElement('p')
if (response.alert === null) {
$responseP.className = 'notice'
$responseP.innerHTML = response.notice
} else {
// If there are both alert and notice responses, only show the alert
$responseP.className = 'alert'
$responseP.innerHTML = response.alert
}
$('.flash').append($responseP)
$(window).scrollTop(0)
}
})
$(this).dialog('destroy')
$referContainer.hide()
}
}]
}).prev().find('.ui-dialog-titlebar-close').hide() // Hide the standard close button
validateSendReferral()
})
$(document).on('input', '.refer-resident-form', function (event) {
validateSendReferral()
})
function validateSendReferral () {
if (($('input#referral_referee_first_name').val().length > 0)
&& ($('input#referral_referee_last_name').val().length > 0) && validateEmail()) {
$('.btn-send').prop('disabled', false)
$('.btn-send').removeClass('ui-state-disabled')
} else {
$('.btn-send').prop('disabled', true)
$('.btn-send').addClass('ui-state-disabled')
}
}
function validateEmail () {
var re = /\S+@\S+\.\S+/
return re.test($('input.email').val())
}
})(document, window.jQuery)
Может кто-нибудь сказать мне, где я иду не так или что я пропускаю, пожалуйста?
Редактировать:
Когда я отправляю форму, я получаю следующий вывод
(0.2ms) BEGIN
(0.2ms) COMMIT
Started POST "/homeowners/referral" for ::1 at 2019-04-01 12:40:41 +0100
Processing by Homeowners::ReferralsController#create as JSON
Resident Load (0.6ms) SELECT "residents".* FROM "residents" WHERE "residents"."id" = $1 ORDER BY "residents"."id" ASC LIMIT $2 [["id", 2], ["LIMIT", 1]]
(0.7ms) SELECT COUNT(*) FROM "resident_notifications" WHERE "resident_notifications"."resident_id" = $1 AND "resident_notifications"."read_at" IS NULL [["resident_id", 2]]
Plot Load (0.5ms) SELECT "plots".* FROM "plots" WHERE "plots"."deleted_at" IS NULL AND "plots"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]]
Developer Load (0.5ms) SELECT "developers".* FROM "developers" WHERE "developers"."deleted_at" IS NULL AND "developers"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]]
Country Load (0.3ms) SELECT "countries".* FROM "countries" WHERE "countries"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]]
Development Load (0.3ms) SELECT "developments".* FROM "developments" WHERE "developments"."deleted_at" IS NULL AND "developments"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]]
Brand Load (0.3ms) SELECT "brands".* FROM "brands" WHERE "brands"."brandable_id" = $1 AND "brands"."brandable_type" = $2 LIMIT $3 [["brandable_id", 1], ["brandable_type", "Development"], ["LIMIT", 1]]
Completed 400 Bad Request in 24ms (ActiveRecord: 3.1ms)
ActionController::ParameterMissing (param is missing or the value is empty: referral):
app/controllers/homeowners/referrals_controller.rb:23:in `referral_params'
app/controllers/homeowners/referrals_controller.rb:17:in `create_new_referral'
app/controllers/homeowners/referrals_controller.rb:11:in `create'