Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 模型关联有多个删除对象,并且多个删除对象都属于多个删除对象?_Ruby On Rails_Ruby_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 模型关联有多个删除对象,并且多个删除对象都属于多个删除对象?

Ruby on rails 模型关联有多个删除对象,并且多个删除对象都属于多个删除对象?,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我有一个有很多短途旅行的模型项目 class Project < ActiveRecord::Base has_many :excursions def remove_user_from_excursion(excursion_id, current_user) excursions.find(excursion_id).users.delete(current_user) save! end end class项目

我有一个有很多短途旅行的模型项目

class Project < ActiveRecord::Base
  has_many :excursions

    def remove_user_from_excursion(excursion_id, current_user)
      excursions.find(excursion_id).users.delete(current_user)
      save!
    end
end
class项目
然后我有一个远足模型,它有很多用户

class Excursion < ActiveRecord::Base
  belongs_to :project
  has_and_belongs_to_many :users
end
课堂游览

我想提供从游览中删除用户的功能,我尝试在项目模型上调用从游览中删除用户方法,但似乎不起作用。用户保留作为游览的一部分。我做错了什么?

首先,不能在数组上使用“查找”。在你的情况下,你应该有一系列的远足,你想通过id找到它,但这种方式是行不通的。“find”方法在模型类上工作,如“shipption.find(shipption\u id)”

第二,你必须有一个“项目”的实例来获得与项目相关的远足,所以你应该使用“自我”->“自我。远足……”

最终,要想做你想做的事,你可以写下如下内容:

def remove_user_from_excursion(excursion_id, current_user)
    Excursion.find(excursion_id).users.delete(current_user)
end 


当然,第一个选项要好得多:)

偏移\u实例。users.find().destroy应该完成这项工作。在这种关系中,destroy意味着销毁联接表中关联两个实体的记录,在本例中为表偏移users。请尝试一下。

以下操作应该有效

def remove_user_from_excursion(excursion_id, current_user)
  excursions.find(excursion_id).users.destroy(current_user)
end

您是否正在尝试删除用户或用户与远足之间的关系保存!此处不需要。向我们显示提供的db查询。@AnilMaurya我正在尝试删除用户与远足之间的关系。您确定您的代码正在删除关系而不是用户本身吗?是的,当关系为
一时,即。您的短途旅行有许多用户通过短途旅行用户。请在控制台上尝试一下,看看会发生什么。
.find().destroy
将查找并加载用户,并将破坏用户而不是关系。我正在rails应用程序中尝试它,它可以正常工作。无论如何,请尝试使用
项目.短途旅行.find(短途旅行id).users.delete(用户id)
def remove_user_from_excursion(excursion_id, current_user)
  excursions.find(excursion_id).users.destroy(current_user)
end