1

프로젝트에 여러 프로젝트 멤버를 할당 할 수있는 양식을 만들려고합니다. 여기 다중 선택

내도이다 (사용자 및 프로젝트 모델은 UserProject을 통해 관련되는) : 나는 모든 장소에 걸쳐 projectmember 태그를 넣어 가지고

<div class="field"> 
<%= fields_for :projectmember do |u| %> 
    <%= u.label :projectmember %><br /> 
    <%= select_tag :projectmember, options_for_select(User.all.collect {|u| [u.id, u.lastname]}, :projectmember),:multiple => true, :prompt => 'Select Person' %> 

<% end %> 
    </div> 

하지만 난이 필드를 저장하는 방법을 알아낼 수 없습니다 내 DB 프로젝트와 user_projects에 projectmember !! ??

내 projects_controller :

def new 
@project = Project.new 
@user_project=UserProject.new 
@user=User.all  
@user_lastnames = User.all.collect do |u| 
    u.lastname 
end 

respond_to do |format| 
    format.html # new.html.erb 
    format.json { render json: @project } 
end 
end 

def create 
@project = Project.new(params[:project]) 

respond_to do |format| 
    if @project.save 
    format.html { redirect_to @project, notice: 'Project was successfully created.' } 
    format.json { render json: @project, status: :created, location: @project }   

    @user_project=UserProject.create(:project_id => @project.id, :user_id => @project.projectmember)  

    else 
    format.html { render action: "new" } 
    format.json { render json: @project.errors, status: :unprocessable_entity } 
    end 
end 
end 

하나 개의 인스턴스를 생성 한 후, 콘솔을 사용하여 명령이 : 프로젝트 @ = Project.all이 제공 : 프로젝트 ID : 55, 프로젝트 이름 " 프로젝트 헤더 : "5", projectmember : nil, projecttypename : "dffd">

답변

1

귀하의 연관성이 t 그의 :

class Project < ActiveRecord::Base 
    has_many :project_users 
    has_many :users, :through=>:project_users 
end 

... 프로젝트 양식, "이름"옵션 과 함께 다음과 같은 도우미를 사용 (: 이름 => '프로젝트는 [user_ids] []')가 선택한 ID를 통과하는 방법 컨트롤러 :

<%= select_tag :user_ids, options_for_select(User.all.collect {|u| [u.lastname, u.id]}),:multiple => true, :prompt => 'Select Person', :name=>'project[user_ids][]' %> 

당신에게 PARAMS에서 선택한 ID를 줄 것이다 다음에 할당하는 컨트롤러 조치를 연결해야합니다. 예를 들면 : 당신이 편집 양식을 렌더링 할 때 선택한 항목이 다시 선택에 도착하기 위해

def create 
    @project = Project.new(params[:project]) 
    users = User.find(params[:project][:user_ids]) rescue [] 
    @project.users = users 
    if @project.save 
     ... 
    else 
     ... 
    end 
end 

def update 
    @project = Project.find(params[:id]) 
    users = User.find(params[:project][:user_ids]) rescue [] 
    @project.users = users 
    if @project.update_attributes(params[:project]) 
     ... 
    else 
    ... 
    end 
end 

, 나는 당신이 options_for_select 방법에 대한 인수로 그를 추가해야 할 것 있으리라 믿고있어. 정확하지는 않습니다. 위의 모든 작업을 수행하는 대신 양식을 렌더링 할 때 할당 된 각 사용자에 대해 확인을 설정할 수 있으므로 확인란을 사용하여 사용자를 선택하는 방법이 있습니다. 행운을 빕니다.

+0

고맙습니다. 매우 유용했습니다. – Matoeil

0

내 모델처럼 참이었다 : 난 내보기에서 변경할 필요가있다

class Project < ActiveRecord::Base 
    has_many :project_users 
    has_many :users, :through=>:project_users 

    attr_accessible :colourcode, :projectdescription, :user_id, :projectname, :projectheader, :projectmember, :projecttypename 
end 

(다른 대량 할당 보호 할 수 없습니다 특성) :

<%= select_tag :user_ids, options_for_select(User.all.collect {|u| [u.lastname, u.id]}),:multiple => true, :prompt => 'Select Person', :name=>'project[user_ids][]' %> 

<%= select_tag :projectmember, options_for_select(User.all.collect {|u| [u.lastname, u.id]}),:multiple => true, :prompt => 'Select Person', :name=>'project[projectmember][]' %> 

및 내 컨트롤러 :

프로젝트가

을 삭제 한 경우

가 자동으로 프로젝트/사용자 커플을 삭제 : 내가

: 대한 행복

@p=Project.all 

Project id: 69, projectname: "test", projectdescription: "blabla", colourcode: "blue", projectheader: "5", projectmember: "---\n- '5'\n- '6'\n", projecttypename: "caucasian">] 


@up=UserProject.all 


UserProject id: 86, project_id: 69, user_id: 5, created_at: "2012-06-07 13:04:51", updated_at: "2012-06-07 13:04:51"> 

UserProject id: 87, project_id: 69, user_id: 6, created_at: "2012-06-07 13:04:51", updated_at: "2012-06-07 13:04:51">, 

여전히 수행해야합니다

def create 
@project = Project.new(params[:project]) 

users = User.find(params[:project][:projectmember]) rescue [] 
@project.users = users  



respond_to do |format| 
    if @project.save 
    format.html { redirect_to @project, notice: 'Project was successfully created.' } 
    format.json { render json: @project, status: :created, location: @project }   

    @user_project=UserProject.create(:project_id => @project.id, :user_id => @project.projectmember) 
    @user_project=UserProject.create(:project_id => @project.id, :user_id => @project.projectheader) 

내가 창조 한 후 지금 가지고

은 ID 번호가 아닌 해당 회원 이름을 화면에 표시합니다 ...