0

私の質問の文脈から始めましょう。私はオフィスのグループを持っており、それぞれにレビュアーが関連付けられています。レビュー担当者は、1 つのオフィスにのみ関連付けることができます。2 つの選択ボックスを作成したいと考えています。1 つは表示しているオフィスに関連付けられているすべてのレビュー担当者を一覧表示し、もう 1 つは利用可能なすべてのレビュー担当者を一覧表示します (基本的に、このオフィスにまだ割り当てられていないすべてのレビュー担当者です)。

現在のレビュアーのリストボックスの目標は、選択されたときにオフィスを 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 %>

どんな提案でも大歓迎です。ありがとう!

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 に答える