よりもむしろrole1
からrole3
にレコードを更新し、簡単な方法は、role1
のレコードを削除し、role2
のための新しいを作成することです。 has_and_belongs_to_many
については
は、あなたが必要となるすべてのidを渡しているとレールが自動的にそれを扱うでしょう。
例:Railsのコンソールの場合
:
-> @user = User.first
-> puts @user.role_ids
# [1,2]
-> @user.role_ids = [2, 3]
これはrole1
を削除し、role3
編集のための記録を作成することにより、ユーザに新しい役割を割り当てます。 html.erb(表示):
今
def update
respond_to do |format|
if @user.update(user_params)
format.html { redirect_to @user, notice: 'User was successfully updated.' }
format.json { render :show, status: :ok, location: @user }
else
format.html { render :edit }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
private
def user_params
params.require(:user).permit(:first_name, :last_name, role_ids: [])
end
あなたはrole2
とrole3
を選択:
あなたはUser
のフォームを持っており、複数選択
<%= form_for(book) do |f| %>
<div class="field">
<%= f.label :first_name %>
<%= f.text_field :first_name %>
</div>
<div class="field">
<%= f.label :roles %>
<%= f.collection_select :role_ids, Role.all, :id, :name, {}, {:multiple => true} %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
users_controller.rb(コントローラ)とroles
のドロップダウンを持っていると仮定しましょうしてフォームを送信し、Railsは単にrole1
のレコードを削除することによってそれを処理し、role3
0のための別のものを作成します
'user.roles.new =" newrole "と' user.roles.save' – Gabbar
新しいロールを追加しない、role1 - > role3を更新したい –
ロールモデルのロールのカラム名は何ですか?これはOPの問題を解決し、なぜ私は、彼らが 'user.role_idsの=知られている場合、それははるかに簡単IDSで動作するように見つける – Gabbar