ruby-on-rails - Rails 表单提交空白
问题描述
我正在处理我的 Rails 应用程序表单:
<div class="col-md-9">
<div class="card">
<div class="card-header">
<strong>Add Contact</strong>
</div>
<% if @contact.errors.any? %>
<div class="alert alert-danger">
<h3>Please correct the following:</h3>
<ul>
<% @contact.errors.full_messages.each do |message| %>
<li> <%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<%= form_for(@contact, html: {multipart: true}) do |f| %>
<div class="card-body">
<div class="row">
<div class="col-md-9">
<div class="form-group row">
<%= f.label :name, class: "col-md-3 col-form-label"%>
<div class="col-md-8">
<%= f.text_field :name, class: "form-control"%>
</div>
</div>
<div class="form-group row">
<%= f.label :email, class: "col-md-3 col-form-label"%>
<div class="col-md-8">
<%= f.email_field :email, class: "form-control"%>
</div>
</div>
<div class="form-group row">
<%= f.label :phone, class: "col-md-3 col-form-label"%>
<div class="col-md-8">
<%= f.text_field :phone, class: "form-control"%>
</div>
</div>
<div class="form-group row">
<%= f.label :mobile, class: "col-md-3 col-form-label"%>
<div class="col-md-8">
<%= f.text_field :mobile, class: "form-control"%>
</div>
</div>
<div class="form-group row">
<%= f.label :company, class: "col-md-3 col-form-label"%>
<div class="col-md-8">
<%= f.text_field :company, class: "form-control"%>
</div>
</div>
<div class="form-group row">
<%= f.label :address, class: "col-md-3 col-form-label"%>
<div class="col-md-8">
<%= f.text_area :address, class: "form-control", rows: 3%>
</div>
</div>
<div class="form-group row">
<%= f.label :city, class: "col-md-3 col-form-label"%>
<div class="col-md-8">
<%= f.text_field :city, class: "form-control"%>
</div>
</div>
<div class="form-group row">
<%= f.label :state, class: "col-md-3 col-form-label"%>
<div class="col-md-8">
<%= f.text_field :state, class: "form-control"%>
</div>
</div>
<div class="form-group row">
<%= f.label :country, class: "col-md-3 col-form-label"%>
<div class="col-md-8">
<%= f.text_field :country, class: "form-control"%>
</div>
</div>
<div class="form-group row">
<%= f.label :zip, class: "col-md-3 col-form-label"%>
<div class="col-md-8">
<%= f.text_field :zip, class: "form-control"%>
</div>
</div>
<div class="form-group row">
<%= f.label :group_id, class: "col-md-3 col-form-label"%>
<div class="col-md-5">
<%= f.collection_select :group_id, Group.all, :id, :name, { prompt: "Select Group" }, class: "form-control" %>
</div>
<div class="col-md-3">
<a href="#" id="add-group-btn" class="btn btn-outline-secondary btn-block">Add Group</a>
</div>
</div>
<div class="form-group row" id="add-new-group">
<div class="offset-md-3 col-md-8">
<div class="input-group mb-3">
<input type="text" class="form-control" name="group_id" placeholder="Enter group name" aria-label="Enter group name" aria-describedby="button-addon2">
<div class="input-group-append">
<button class="btn btn-outline-secondary" type="button" id="button-addon2">
<i class="fa fa-check"></i>
</button>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-3">
<div class="fileinput fileinput-new" data-provides="fileinput">
<div class="fileinput-new img-thumbnail" style="width: 150px; height: 150px;">
<img src="http://via.placeholder.com/150x150" alt="...">
</div>
<div class="fileinput-preview fileinput-exists img-thumbnail" style="max-width: 150px; max-height: 150px;"></div>
<div class="mt-2">
<span class="btn btn-outline-secondary btn-file"><span class="fileinput-new">Select image</span><span class="fileinput-exists">Change</span><input type="file" name="..."></span>
<a href="#" class="btn btn-outline-secondary fileinput-exists" data-dismiss="fileinput">Remove</a>
</div>
</div>
</div>
</div>
</div>
<div class="card-footer">
<div class="row">
<div class="col-md-8">
<div class="row">
<div class="col-md-offset-3 col-md-6">
<button type="submit" class="btn btn-primary">Save</button>
<a href="#" class="btn btn-outline-secondary">Cancel</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<% end %>
这是我的模型:
class Contact < ApplicationRecord
belongs_to :group
validates :name, :email, :phone, :mobile, :company, :address, :city, :state, :country, :zip, :group_id, presence: true
validates :name, length: { maximum: 50 }
validates :email, length: { maximum: 50 }
validates :phone, length: { maximum: 15 }
validates :mobile, length: { maximum: 15 }
def gravatar
hash = Digest::MD5.hexdigest(email.downcase)
"https://www.gravatar.com/avatar/#{hash}"
end
end
当我选择组并填写所有内容时,我仍然收到 ff 错误:
Please correct the following:
Group must exist
Group can't be blank
我不确定是什么阻止了提交,因为我在单击“保存”时提交并选择了组。我还检查了 f.collection 字段是否正确启动但仍然出现错误。
知道是什么原因造成的吗?
更新:
这是我的控制器代码:
class ContactsController < ApplicationController
def index
if params[:group_id] && !params[:group_id].empty?
@contacts = Contact.where(group_id: params[:group_id]).order(:created_at, :desc).page params[:page]
else
@contacts = Contact.order(:created_at, :desc).page params[:page]
end
end
def new
@contact = Contact.new
end
def create
@contact = Contact.new(contact_params)
if @contact.save
flash[:success] = "Contact was successfully created."
redirect_to contacts_path
else
render 'new'
end
end
private
def contact_params
params.require(:contact).permit(:name, :email, :phone, :mobile, :company, :address, :city, :state, :country, :zip)
end
end
这是提交后来自终端的日志:
Started POST "/contacts" for ::1 at 2019-12-14 19:26:30 +0800
Processing by ContactsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"MsG6nNpJfDSiOHjoUP/TUenhzyIlXlftSxY9xY7q8vkrmQJMUK471gr+8wQmQ8STNoE6kTHTQzM1gC1UUKbO5Q==", "contact"=>{"name"=>"Samuel", "email"=>"samuel@gmail.com", "phone"=>"99999", "mobile"=>"99999", "company"=>"KASdasd", "address"=>"2015-B", "city"=>"ANgeles", "state"=>"Pampanga", "country"=>"Philippines", "zip"=>"9000", "group_id"=>"16"}, "group_id"=>""}
Unpermitted parameter: :group_id
(0.1ms) begin transaction
↳ app/controllers/contacts_controller.rb:17
(0.5ms) rollback transaction
↳ app/controllers/contacts_controller.rb:17
Rendering contacts/new.html.erb within layouts/application
Group Load (0.3ms) SELECT "groups".* FROM "groups"
↳ app/views/contacts/new.html.erb:109
Rendered contacts/new.html.erb within layouts/application (17.9ms)
Rendered layouts/_navbar.html.erb (1.1ms)
(0.2ms) SELECT COUNT(*) FROM "contacts"
↳ app/views/layouts/_sidebar.html.erb:8
CACHE Group Load (0.0ms) SELECT "groups".* FROM "groups"
↳ app/views/layouts/_sidebar.html.erb:13
(0.2ms) SELECT COUNT(*) FROM "contacts" WHERE "contacts"."group_id" = ? [["group_id", 15]]
↳ app/views/layouts/_sidebar.html.erb:18
(0.2ms) SELECT COUNT(*) FROM "contacts" WHERE "contacts"."group_id" = ? [["group_id", 16]]
↳ app/views/layouts/_sidebar.html.erb:18
(0.2ms) SELECT COUNT(*) FROM "contacts" WHERE "contacts"."group_id" = ? [["group_id", 17]]
↳ app/views/layouts/_sidebar.html.erb:18
Rendered layouts/_sidebar.html.erb (8.8ms)
Completed 200 OK in 166ms (Views: 147.9ms | ActiveRecord: 1.7ms)
解决方案
Unpermitted parameter: :group_id
在服务器日志中是您的线索。由于 group_id 不在您在以下代码中允许的参数列表中,因此它永远不会被分配,因此它认为您没有选择一个组。
改变
def contact_params
params.require(:contact).permit(:name, :email, :phone, :mobile, :company, :address, :city, :state, :country, :zip)
end
至
def contact_params
params.require(:contact).permit(:name, :email, :phone, :mobile, :company, :address, :city, :state, :country, :zip, :group_id)
end
推荐阅读
- android - 应用程序启动时出现错误“调用 AppRegistery.runApplication 时出错”
- python - 'numpy.float64' 对象不能解释为整数,但我无法确定它在哪里要求整数
- javascript - 用 html 内容中的 iframe 替换 youtube 链接?
- junit - 需要 convertStringToDocument 方法的测试用例
- postgresql-9.5 - 如何从 /var/lib/postgresql/9.5/main/base/ 目录中恢复 Postgresql 数据库表?
- ios - Xamarin iOS 按钮不起作用
- java - 有没有办法在我的测试自动化套件目录中自动更新 chromedriver?
- ios - 如何检查 UIViewController 类是定义为 SDK 的一部分还是用户定义的?
- java - 子类映射时的休眠问题 - 实例化默认元组
- node.js - 如何使用连接到套接字的socket.id发送多个客户端(Nodejs,Socket.io)