Rails simple_form 没有将数据字段推送到数据库
Posted
技术标签:
【中文标题】Rails simple_form 没有将数据字段推送到数据库【英文标题】:Rails simple_form not pushing data field to database 【发布时间】:2017-05-22 14:44:41 【问题描述】:好的,我正在尝试使用简单的表单来创建课程。表单不会将数据推送到数据库。我使用 Rails 中的 Select_tag 让它工作,但无法以这种方式进行数据验证。我现在正在尝试更新 select_tag 以使用 simple_form。数据验证正常,但表单标签 f.association 无法识别数据。
类别模型关系对 Course 是正确的,因为我已经使用下面的代码对其进行了处理。
<%= select_tag(:category_id, options_for_select(@categories), :prompt => "Select Category") %>
这是一个简单的表单代码,它让我可以选择可用的类别,但它不会将 id 推送到数据库中。我将在下面添加我的控制器/模型以进行健全性检查。谢谢。
课程模式
validates :course_reference, :title, :course_img_file_name, :description, :short_description, :venue, :duration_days, :duration_weeks, :start_date, :start_time, :end_date, :max_enrolment, :price, :category_id, :presence => true
searchkick
belongs_to :user
belongs_to :category
belongs_to :location
类别模型
class Category < ActiveRecord::Base
has_many :courses
end
课程控制器
def new
@course = current_user.courses.build
@categories = Category.all.map |c| [c.name, c.id]
@locations = Location.all.map |c| [c.name, c.id]
end
def create
@course = current_user.courses.build(course_params)
@course.category_id = params[:category_id]
@categories = Category.all.map |c| [c.name, c.id]
@locations = Location.all.map |c| [c.name, c.id]
if @course.save
redirect_to root_path
else
render 'new'
end
end
一如既往地感谢任何帮助。谢谢。
当我删除 category_id 的存在 = true 时创建课程时添加背景中发生的事情
Started POST "/courses" for ::1 at 2017-05-22 15:54:13 +0100
Processing by CoursesController#create as html
Parameters: "utf8"=>"✓", "authenticity_token"=>"du0IPedCSPueWp1RIOqWNenXiIpQLMLSohvt1ls7BUteoDFxzGFpVQ959iryIq+wBEUeaNOkAmA3jCjAG+d0Vw==", "course"=>"course_reference"=>"cf0002", "course_img"=>#<ActionDispatch::Http::UploadedFile:0x007fce9a6ee950 @tempfile=#<Tempfile:/var/folders/gx/86yj74bx3md88cfn2fwc975h0000gn/T/RackMultipart20170522-1878-15pqchz.png>, @original_filename="Health Course Red.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"course[course_img]\"; filename=\"Health Course Red.png\"\r\nContent-Type: image/png\r\n">, "title"=>"Infection Control 1022", "category_id"=>"1", "description"=>"test", "short_description"=>"Short description should really be kept to the snappy bare bones", "venue"=>"36 annamoe park, cabra, dublin", "duration_days"=>"1", "duration_weeks"=>"1", "start_date(1i)"=>"2017", "start_date(2i)"=>"5", "start_date(3i)"=>"22", "start_time(1i)"=>"2017", "start_time(2i)"=>"5", "start_time(3i)"=>"22", "start_time(4i)"=>"14", "start_time(5i)"=>"48", "end_date(1i)"=>"2017", "end_date(2i)"=>"5", "end_date(3i)"=>"22", "max_enrolment"=>"1", "price"=>"1", "_wysihtml5_mode"=>"1", "location_id"=>"", "commit"=>"Create Course"
类别 ID 在参数中。但是,如果我查看 SQL 查询,则不包括在内。
SQL (0.5ms) INSERT INTO "courses" ("title", "description", "price", "course_img_file_name", "course_img_content_type", "course_img_file_size", "course_img_updated_at", "venue", "max_enrolment", "course_reference", "short_description", "duration_days", "duration_weeks", "start_date", "start_time", "end_date", "user_id", "latitude", "longitude", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) [["title", "Infection Control 1022"], ["description", "test"], ["price", 1], ["course_img_file_name", "Health_Course_Red.png"], ["course_img_content_type", "image/png"], ["course_img_file_size", 17181], ["course_img_updated_at", "2017-05-22 14:54:13.012445"], ["venue", "36 annamoe park, cabra, dublin"], ["max_enrolment", 1], ["course_reference", "cf0002"], ["short_description", "Short description should really be kept to the snappy bare bones"], ["duration_days", 1.0], ["duration_weeks", 1.0], ["start_date", "2017-05-22"], ["start_time", "2017-05-22 14:48:00.000000"], ["end_date", "2017-05-22"], ["user_id", 1], ["latitude", 53.3598805], ["longitude", -6.289487299999999], ["created_at", "2017-05-22 14:54:13.705340"], ["updated_at", "2017-05-22 14:54:13.705340"]]
(2.7ms) 提交事务 课程存储 (27.7ms) "id":3 重定向到http://localhost:3000/
课程参数看起来不错,因为它有 :category_id
def course_params
params.require(:course).permit(:title, :description, :price, :category_id, :course_img, :venue, :location_id, :max_enrolment, :course_reference, :short_description, :duration_days, :duration_weeks, :start_date, :start_time, :end_date, :user_id, :complete)
end
【问题讨论】:
你能粘贴course_params
的定义吗?
嗨@JCorcuera,已将其添加到那里。当我使用 Rails 中的选择标签功能时,课程创建工作正常。当我尝试使用 simple_forms 时它失败了。强大的参数现在在上面。谢谢。
【参考方案1】:
我认为问题出在这里:
@course = current_user.courses.build(course_params)
@course.category_id = params[:category_id]
我看到category_id
在course_params
内部,所以当你构建对象时,它就在那里,但后来你将它分配给params[:category_id]
,即nil
。
【讨论】:
好的,我试试这个。一旦我对此进行了测试,就会回到你身边。谢谢一米。我有一个类似的问题,我刚刚发布了,我试过认为它可能是类似的,但它没有奏效。谢谢老兄。 是的,没关系。传奇。谢谢@JCorcuera。不敢相信我已经折腾了好几个小时,就这么简单。我的印象是我必须调用参数,因为它不是来自同一个模型并且是一个关联。这绝对是有道理的,因为我在强大的参数中提到了它,它已经从表单中引入了它。再次感谢伙计。标记为正确。以上是关于Rails simple_form 没有将数据字段推送到数据库的主要内容,如果未能解决你的问题,请参考以下文章
Rails 5 simple_form 将单选按钮标记为必需,如果未填写则阻止提交表单
希望 rails simple_form 单选按钮显示不是值的文本
如何将 select2-rails 与 simple_form 一起使用?
无法让 rails 搜索表单与 simple_form 和 sunspot 一起使用