0

我将从我的问题的一些背景开始。我有一组办公室,每个办公室都有与之相关的审阅者。一个审阅者只能与一个办公室关联。我想创建两个选择框。一个列出了与我正在查看的办公室相关联的所有审阅者,另一个列出了所有可用的审阅者(基本上是所有尚未分配到该办公室的审阅者)。

当前审阅者的列表框的目标是在他们被选中时将他们的办公室设置为零。可用审阅者列表框的目标是在他们被选中时将他们的办公室设置为此办公室的 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 %>

任何建议将不胜感激。谢谢!

4

1 回答 1

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

以及选定/可用的审阅者的等价物。

于 2013-10-09T18:28:46.830 回答