所以这是我的模特:
user.rb:
has_one :interview_slot
interview_slot.rb:belongs_to :user
interview_slot
有一个start_time
,一个end_time
和一个available
布尔值。
例如,假设我已经生成了20个interview_slot
个实例的列表,我想要做的就是让我的用户从下拉框中选择其中一个。
我首先检查用户是否已经有一个访谈位置:
@interview_slot = find_interview_slot(@rushee)
def find_interview_slot(user)
return InterviewSlot.find_by(user_id: user.id)
rescue
nil
end
如果@interview_slot
是nil
,那么我想在下拉框中显示所有仍为available
的面试广告位列表,我希望用户能够选择其中一个访谈位置,点击提交,并将指定的InterviewSlot
与用户相关联。我的问题是,如何编写将要执行此操作的表单?我只熟悉调用类似@user.interview_slots.build
和调用form_for
之类的内容:form_for(@interview_slot) do |f|
,但显然我不想在这种情况下建立一个新的interview_slot,我只是想关联用户现有的访谈时间。
有什么见解?感谢。
编辑:我还有一个实例变量,它是尚未与用户关联的所有InterviewSlots的集合:@available_slots = InterviewSlot.where(user_id: nil)
;我只是不知道如何制作允许用户从此集合中选择单个插槽并将插槽与用户关联的表单。
编辑2:
我现在有这个代码:
<%= form_for(@interview_slot) do |f| %>
<% slots_for_select = {}
@available_slots.each do |slot|
slots_for_select[slot.start_time.strftime("%a. %D | %l:%M %p")] = slot
end %>
<%= select_tag(:interview_slot, options_for_select(slots_for_select)) %>
<%= f.submit "Schedule Interview", class: "btn btn-sm" %>
<% end %>
这给了我一个所有可用面试插槽的下拉框,但问题是,@interview_slot
在控制器中设置为等于@user.interview_slots.build(interview_slot_params)
- 如何让它更新选定的interview_slot
是否具有@user
的ID,而不是创建新的interview_slot?
答案 0 :(得分:0)
# interview_slots_controller.rb
def update
interview_slot = InterviewSlot.find(params[:interview_slot_id])
interview_slot.user_id = your_current_user.id
interview_slot.save
end