0

プロジェクトを編集するためのビューに取り組んでいます。このビューには、すべてのプロジェクトフィールドを含むフォームが含まれており、プロジェクトのメンバーについては、チェックボックスを表示します。

フォームが送信され、コントローラーが引き継ぐと、プロジェクトを正しく更新できるように、パラメーターからメンバーの配列を削除します。しかし、私が疑問に思うのは、テーブル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"
4

1 に答える 1

1

Projectの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])
  #...
于 2013-02-11T22:35:37.980 に答える