Rails:新关联的 activerecord 更新

陈凯文

我有两个模型:用户和角色。一个用户可以有多个角色。

假设用户 1 有角色 1 和角色 2。现在我希望用户 1 具有角色 2 和角色 3。

class User < ActiveRecord::Base

  has_and_belongs_to_many :roles

class Role < ActiveRecord::Base

  has_and_belongs_to_many :users

这是我的代码

user = User.find(1) 
newrole = Role.find(2) #get role3 

user.roles[0] = newrole 

user.roles[0].save  # does not work 

user.save # does not work 

ruby on rails 解决我的问题的正确方法是什么?

阿坎克沙

而不是从更新记录role1role3,一个简单的方法是删除记录role1,并创造新的role2

对于has_and_belongs_to_many,您所需要的只是传递 id,rails 会自动处理它。

例子:

对于 Rails 控制台:

-> @user = User.first
-> puts @user.role_ids
   # [1,2]

-> @user.role_ids = [2, 3]

这将通过删除role1和创建记录来为用户分配新角色role3

edit.html.erb(查看)

让我们假设您有一个表单User并有一个roles带有多项选择的下拉列表

<%= 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(控制器)

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

现在,当您选择role2androle3并提交表单时,Rails 将通过删除记录来处理它role1并为role3

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Rails从表单更新ActiveRecord

来自分类Dev

更新与 ActiveRecord rails 5 关联的哈希中的信息

来自分类Dev

Rails ActiveRecord关联

来自分类Dev

Rails ActiveRecord不会在创建时保存关联,但会在更新时保存

来自分类Dev

使用Rails中的行更新ActiveRecord

来自分类Dev

Rails 4多个ActiveRecord关联

来自分类Dev

Rails activerecord count 关联数

来自分类Dev

ActiveRecord关联

来自分类Dev

ActiveRecord关联

来自分类Dev

ActiveRecord关联

来自分类Dev

Rails ActiveRecord.new创建一个新记录,而不是更新现有记录

来自分类Dev

最终用户更新Rails ActiveRecord模型中的枚举

来自分类Dev

Rails ActiveRecord模型未在RSpec模型规范中更新

来自分类Dev

Rails ActiveRecord不保存更新-但不会引发任何错误

来自分类Dev

如何构建Rails链接,以便单击它会更新ActiveRecord属性

来自分类Dev

Rails ActiveRecord模型未在RSpec模型规范中更新

来自分类Dev

Rails:ActiveRecord关联返回零关系

来自分类Dev

Rails:基于关联值的ActiveRecord查询

来自分类Dev

Rails的ActiveRecord的belongs_to关联未加载

来自分类Dev

Rails 4 ActiveRecord的关联计数顺序

来自分类Dev

Ruby on Rails:Activerecord集合关联的模型

来自分类Dev

通过发送更新ActiveRecord

来自分类Dev

如何在Rails中使用ActiveRecord查询关联的关联?

来自分类Dev

Ruby,ActiveRecord:本地Rails服务器更新记录属性,而远程服务器不更新

来自分类Dev

ActiveRecord何时保存关联?

来自分类Dev

存根ActiveRecord关联

来自分类Dev

ActiveRecord双重关联

来自分类Dev

动态更新ActiveRecord对象属性

来自分类Dev

ActiveRecord :: AssociationTypeMismatch在更新模型时