我将从我的问题的一些背景开始。我有一组办公室,每个办公室都有与他们相关的评论员。审阅者只能与一个办公室相关联。我想创建两个选择框。一个列出了与我正在查看的办公室相关联的所有审阅者,另一个列出了所有可用的审阅者(基本上所有审阅者都没有分配到该办公室)。
当前审阅者列表框的目标是在选中时将其办公室设置为nil。可用审阅者列表框的目标是在选中时将其办公室设置为此办公室的ID。我不确定如何在使用选择框时仅更改审阅者的office_id。
代码方面,到目前为止我所拥有的是:
office_controller.rb
def edit
@office = Group.find params[:id] if params[:id]
@current_reviewers = Reviewer.find_all_by_group_id(@office.id)
@available_reviewers = Reviewer.where('group_id <> ?',[@office.id])
end
def update
?
end
办公室/ edit.html.erb
<% form_for(@office, :url => {:controller => :office, :action => :update, :id => @office.id}, :html => {}) do |f| %>
...
<%= select_tag 'removedReviewers', options_from_collection_for_select(@current_reviewers, "id", "display_name"), :multiple => true %>
<%= select_tag 'chosenReviewers', options_from_collection_for_select(@available_reviewers, "id", "display_name"), :multiple => true %>
...
<% end %>
任何建议都将不胜感激。谢谢!
答案 0 :(得分:0)
我通过添加select_tag来通过select_tag名称的[]修饰符将所选对象作为集合来解决这个问题。所以,在这个例子中它是:
<%= select_tag 'removedReviewers[]', options_from_collection_for_select(@current_reviewers, "id", "display_name"), :multiple => true %>
为了处理它的控制器代码,我这样做了:
@removedReviewers = params[:removedReviewers]
if !@removedReviewers.nil?
@removedReviewers.each do |reviewer|
@reviewer = Reviewer.find(reviewer)
@reviewer.group_id = nil
@reviewer.save
end
end
等同于所选/可用的评论者。