2013-02-11 79 views
0

我工作的视图编辑项目,其中包含一个表单的所有项目领域,并为项目的成员我呈现出复选框。更新关系表

当表单提交,并且控制器接管我从PARAM删除成员的阵列,所以我可以正确地更新该项目。然而,我想知道的是我应该用什么代码来更新表的projects_users与成员(现在在数组@members)?

编辑项目视图:

<%= form_for @project do |f| %> 
    ... 
     the rest of the form 
    ... 
    <div class="checkbox"> 
     <% @members.each do |user| %> 
      <%= check_box_tag "project[members][]", user.id, '1', :id => "user_#{user.id}" %> 
      <%= label_tag "user_#{user.id}", user.first_name + ' ' + user.last_name, :class => "checkbox" %> 
     <% end %> 
    </div> 
    ... 
     the rest of the form 
    ... 
<% end %> 

项目控制器:

... 
def update 
    @project = Project.find(params[:id]) 
    @members = params[:project].delete(:members) 

    if @project.update_attributes(params[:project]) 

    ... code for updating projects_users? ... 

    redirect_to users_projects_path 
    flash.now[:success] = 'Projektet redigerades.' # Not quite right! 
    else 
    render :action => "edit" 
    end 
end 
... 

表projects_users:

t.integer "project_id" 
t.integer "user_id" 
+1

使用'项目user_ids'属性:你check_box_tag重命名为'check_box_tag “项目[user_ids] []” #...'然后让这在params散列(不做'params [:project] .delete(:user_ids)',让它在params中) – MrYoshiji 2013-02-11 22:26:54

+0

再次感谢!您应该将您的评论转换为答案,以便我可以接受它:) – holyredbeard 2013-02-11 22:33:07

+0

我刚刚发布为答案,今天感谢您的声誉! Ahah – MrYoshiji 2013-02-11 22:36:04

回答

1

使用项目的user_ids属性来更新其用户:

# In the view: 
<%= check_box_tag "project[user_ids][]", user.id, '1', :id => "user_#{user.id}" %> 


# In the controller: 
@project = Project.find(params[:id]) 

#@members = params[:project].delete(:members) 
# you don't need this line since : 
# params[:project][:members] became params[:project][:user_ids] 

if @project.update_attributes(params[:project]) 
    #...