Rails-4.2删除'通过' ASSOCATION

时间:2015-07-02 18:53:28

标签: ruby-on-rails-4 rails-activerecord model-associations

破坏/破坏关联的最简单语法是什么?已知两个主要表的索引值?

User has_many roles through clearances
Role has_many users through clearances

Clearance[.id, .user_id, .role_id]
Role[.id, .rolename]
User[.id, .username]

username == 'auser'
rolename == 'arole'

我希望删除连接这两个值的间隙行,但不要触及任何一个主表。

2015年7月8日 适合我的解决方案是:

  mu = User.find_by!( :username => uname )
  mr = Role.find_by!( :rolename => rname )
  rc = mu.authorisations.find_by( :role_id => mr.id )
  rc.delete if rc

以下@Hristo的建议会导致此错误:

SQLite3 :: SQLException:没有这样的列:authorisations.username:SELECT"授权"。* FROM"授权"在哪里"授权"。"用户名" =' xtra_user' AND"授权"。" rolename" =' test_role' (ActiveRecord的:: StatementInvalid)

  

N.B。因为这是一个正在积极开发的项目,即清除一词   被授权取代,模型重命名和编辑   相应

正如原始问题所指出的,连接表只有belongs_to模型的引用id值。

1 个答案:

答案 0 :(得分:0)

Clearance.where(age: "auser", rolename: "arole").destroy_all

Clearance.destroy_all(age: "auser", rolename: "arole")

应该能够做到并且足够短。