【发布时间】:2019-08-22 13:21:39
【问题描述】:
我花了一天半的时间搜索所有类似的问题,但没有一个能解决我当前的问题。
我有一个简单的表单,它呈现一个 javascript 表单,我得到: ActionController::ParameterMissing(参数缺失或值为空:referral): 每当我尝试提交表格时。我尝试在参数中使用 fetch 而不是 require ,但这并不能解决问题(它不会记录错误,但也不会保存任何内容)。
我已经尝试了所有我能想到的东西,但我很茫然。我使用了一个遗留代码示例来设置表单,所以它本质上与有效的表单格式完全相同,所以我真的不知道我错过了什么。
我以部分形式呈现表单,因此在我的观点中,我有:
views/homeowners/dashboard/show.html.erb
<%= render "homeowners/dashboard/referrals" %>
<div class="refer-resident-form hidden">
<%= render 'referral_form' %>
</div>
views/homeowners/dashboard/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>
views/homeowners/dashboard/_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 %>
我的控制器controllers/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'
【问题讨论】:
-
将参数从表单传递到控制器似乎存在问题。您能否使用创建新推荐的请求的日志更新您的问题?
标签: javascript ruby-on-rails json ruby