Ruby on Rails - 如何使用选择框更改所选项的属性?

时间:2013-10-07 22:34:35

标签: ruby-on-rails ruby ruby-on-rails-3 html-select

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

当前审阅者列表框的目标是在选中时将其办公室设置为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 %>

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

1 个答案:

答案 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

等同于所选/可用的评论者。