ruby-on-rails - 具有嵌套属性的 simple_form

标签 ruby-on-rails simple-form nested-attributes

我想我要问一个由两部分组成的问题;如果这应该分成 2 个问题,我很抱歉。

首先,我试图将类(class)存储到 course 中与 course_days 具有 ActiveRecord 关系的表(类(class)名称、讲师、开始时间、结束时间等...) ( course_idday 对应于星期几 => 1 表示星期日,2 表示星期一,等等)。我的最终目标是将这些显示为 FullCalendar 中的时间表,这就是为什么我认为将 course 分开的原因和 course_days分成两个具有 ActiveRecord 关系的表是最好的。 使用 Rails,这是实现此目标的好方法吗?

如果是这样,其次,我正在使用简单表单将以下数据添加到 2 个表中:coursecourse_days .我想我越来越接近了。我只是在添加 course_days 时遇到了一些困难(例如,如果选中“星期一”、“星期二”和“星期四”,则会将 3 个单独的行添加到 course_days

这是我目前正在使用的:

#new.html.erb
<%= simple_form_for @course, html: { autocomplete: 'off' } do |f| %>
<%= f.input :title, label: 'Class Name', placeholder: 'Class Name' %>
<%= f.input :instructor, placeholder: "Instructor Name" %>
<%= f.input :instructor_email, placeholder: 'Instructor Email' %>
<%= f.input :building, placeholder: 'Building' %>
<%= f.input :room, placeholder: 'Room' %>
<%= f.input :semester do %>
    <%= f.select :semester_id, @semesters.map { |s| [s.name, s.id] } %>
<% end %>
<%= f.simple_fields_for :course_days do |p| %>
    <%= p.input :day, :as => :boolean %>
 <% end %>
<%= f.button :submit, :class => 'btn btn-primary' %>
#app/models/course.rb
class Course < ActiveRecord::Base
  has_many :course_days
  accepts_nested_attributes_for :course_days
end

#app/models/course_day.rb
class CourseDay < ActiveRecord::Base
  belongs_to :course
end

#app/controllers/courses_controller.rb

  def new
   @course = Course.new
   7.times  { @course.course_days.build } #For 7 days of the week??
   @semesters = Semester.all() 
  end

 def create
   @course = Course.new(course_params)
   if @course.save
     redirect_to action: 'new'
     flash[:notice] = "Course Created."
   else
     render :new
   end
 end

 def course_params
  params.require(:course).permit!
 end

如有任何帮助,我们将不胜感激!

编辑: 我在上面的表格中遇到的问题: 1) 如何生成 7 个具有指定属性的复选框以确定它是星期一、星期二等? 2)使用嵌套属性,即使选中了多个复选框,也只向数据库提交一条记录。

编辑2

所以,基本上,当提交该表单时,我希望数据库表看起来像这样:

  courses: id => 14, name => Bio 101, start_time => 08:00:00, end_time 09:00:00

  course_days: id => 11, course_id => 14, day => 1  (For monday)
  course_days: id => 12, course_id => 14, day => 3  (For wednesday)
  course_days: id => 13, course_id => 14, day => 5  (For friday)

最佳答案

请注意,如果有另一个表,则需要从数据库中获取这些行。

因此,当您查询类(class)时,最多需要再点击 7 次才能知道类(class)天数。

我建议您在类(class)模型中有一个days 列。此列将以逗号分隔值保存所选日期。

这样你就不需要 accepts_nested_attributes_for。在这种情况下,您需要做的是使用 before_validation 回调将复选框值填充到 Course.days 列。

关于ruby-on-rails - 具有嵌套属性的 simple_form,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17958817/

相关文章:

jquery - 如何将 jquery-fileupload 用于嵌套附件?

ruby-on-rails - 未为 accepts_nested_attributes_for 触发观察者和回调

ruby-on-rails - ActiveRecord(Rails)中是否有类似 create_view 的东西?

ruby-on-rails - 升级到 Rails 7 后 Active Record 类型映射查询的性能问题

ruby-on-rails - Rails - 在 link_to 中传递参数

html - rails 4 : Change 'name' attribute of Simple Form input

ruby-on-rails - Foundation 6 with Rails Simple Form

ruby-on-rails - 使用关联模型的参数创建 Rails 模型?

ruby-on-rails - Rails - 如何在选择字段中将数字集合设置为 DESC?

ruby-on-rails - Railscast #196/#197 嵌套模型生成