ruby-on-rails - Form_for 不将数据保存到数据库
问题描述
我一生都无法弄清楚我在这里的代码做错了什么。我有一个form_for,但是当我单击保存时,它不会保存表单中的数据,而只是保存控制器中的数据。
控制器:
class RegistersController < ApplicationController
def index
end
def new
@reg = Register.new
end
def create
@reg = Register.new(params.permit(:user, :user_id, :class_id))
@reg.user_id = current_user.id
@reg.save
end
def update
end
end
新的:
<%= form_for @reg do |f| %>
<div class="form-group">
<%= f.label :class_name, class: "col-sm-2 control-label" %>
<%= f.text_area :class_name, class: "form-control"%>
</div>
<div class="form-group">
<%= f.label :user, class: "col-sm-2 control-label" %>
<%= f.text_area :user, class: "form-control" %>
</div>
<%= f.submit 'Save', class: 'btn btn-primary btn-block' %>
<% end %>
模型:
class Register < ApplicationRecord
belongs_to :user, optional: true
belongs_to :event, optional: true
end
编辑:
我做了一些进一步的处理,然后到了这里:
@reg = Register.new(params.required(:user).permit(:user_id, :class_name))
这给了我日志:
Processing by RegistersController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"BJr3T+RiI0YiyixC6EORKtMG3L8Q9LP3kL7Dh4apt0WdeGzN5mVhy/oNn64+xF9TRRztLqL5/Hf6WEwhucRF8w==", "register"=>{"class_name"=>"Toddler", "user"=>"Billy"}, "commit"=>"Save"}
Completed 400 Bad Request in 1ms (ActiveRecord: 0.0ms)
ActionController::ParameterMissing (param is missing or the value is empty: user):
解决方案
就像这样:
def create
@reg = Register.new(params.required(:register).permit(:user_id, :class_name))
@reg.user_id = current_user.id
@reg.save! # This will raise exception if something is wrong
end
顺便说一句,只需适用于 TDD/BDD 概念即可消除此类问题。这个过程非常简单。
推荐阅读
- javascript - 如何对 JavaScript 更改进行测试
- azure-data-factory - 通过 Web 活动使用 Azure 事件中心进行数据工厂 MSI 身份验证
- python - 在 Python3 中将列表作为参数传递是如何工作的?
- java - SpringBoot 单元测试 - 未调用服务方法
- amazon-web-services - 用于图像/视频或服务器的 Amazon S3
- python - 这是什么时间戳?错误的转换
- python - 将 16 位 numpy 数组保存为 16 位 PNG 图像
- java - 记录器正在读取配置,但仅显示错误日志
- angular - 如何以角度隐藏数据列表中的[值]?
- javascript - position: "absolute" with Button 不适用于 IOS | 反应原生