오히려 role1
에서 role3
에 기록을 갱신하는 것보다 간단한 방법은 role1
에 대한 기록을 삭제하고 role2
새로운 만드는 것입니다.
has_and_belongs_to_many
의 경우 필요한 것은 ID와 레일이 자동으로 처리해야합니다.
예 : 레일 콘솔
:
-> @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
에 대한 드롭 다운이 있다고 가정하자 , 양식을 제출하면 레일스는 role1
에 대한 레코드를 삭제하고 role3
0에 대한 레코드를 삭제하면됩니다.
'user.roles.new = "newrole"'및'user.roles.save' – Gabbar
새 역할을 추가하지 않고 role1 -> role3을 업데이트하고 싶습니다. –
역할 모델의 역할에 대한 열 이름은 무엇입니까? – Gabbar