2013-10-07 45 views
0

我将从我的问题开始谈谈一些背景知识。我有一组办公室,每个办公室都有与之相关的审核人员。审阅者只能与一个办公室关联。我想创建两个选择框。其中列出了所有与我正在查看的办公室相关的审阅者,另一个列出了所有可用审阅者(基本上所有尚未分配给此办公室的审阅者)。Ruby on Rails - 如何使用选择框来更改所选项目的属性?

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

我解决了这个问题,通过添加获取select_tag的能力,通过select_tag名称的[]修饰符将选定对象作为集合获取。所以,在这个例子是:

<%= select_tag 'removedReviewers[]', options_from_collection_for_select(@current_reviewers, "id", "display_name"), :multiple => true %> 

和一个控制器代码来处理它,我这样做:

@removedReviewers = params[:removedReviewers] 

if [email protected]? 
    @removedReviewers.each do |reviewer| 
    @reviewer = Reviewer.find(reviewer) 
    @reviewer.group_id = nil 
    @reviewer.save 
    end 
end 

以及等效为选定的/可评审。

相关问题