2013-02-11 5 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 в проекте "[user_ids] []"' check_box_tag, # ... ', а затем пусть это в params hash (не делайте 'params [: project] .delete (: user_ids)', пусть он в параметрах) – MrYoshiji

+0

Еще раз спасибо! Вы должны преобразовать свой комментарий в ответ, чтобы я мог его принять :) – holyredbeard

+0

Я только что написал как ответ, спасибо за репутацию сегодня! Ahah – MrYoshiji

ответ

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]) 
    #... 
Смежные вопросы