Ruby on rails rails试图从不存在的表中销毁

Ruby on rails rails试图从不存在的表中销毁,ruby-on-rails,activerecord,destroy,Ruby On Rails,Activerecord,Destroy,我对简单的删除操作有问题 我有一个观点 %p Name: = @element.name %p Description: = @element.description %p = link_to 'edit', edit_element_path(@element) | = link_to 'delete', @element, :confirm => 'Are you shure?', :method => :delete 当我尝试在浏览器中单击该删除并点击OK时

我对简单的删除操作有问题

我有一个观点


%p
  Name:
  = @element.name
%p
  Description:
  = @element.description
%p
  = link_to 'edit', edit_element_path(@element)
  |
  = link_to 'delete', @element, :confirm => 'Are you shure?', :method => :delete
当我尝试在浏览器中单击该删除并点击OK时,它表示它无法从未存在的表元素\u肌肉\u组中删除,但他为什么要尝试从该未存在的表中删除

顺便说一下,我正在使用Rails 4

您可以在屏幕截图上看到控制器代码

很抱歉eng和ty需要帮助

编辑: 嗨,我还有一件事要补充

元素
拥有并且属于许多:肌肉群

肌肉群
拥有且属于多个:元素


因此,也许它应该从元素组中删除,但为什么该表不存在呢?

我没有经常使用Rails 4,但我认为您试图实现它是错误的: 销毁方法应如下所示:-

def destroy 
 @element = Element.find(params[:id])
 if @element.destroy
   flash[:message] = "Record destroy successfully."
   redirect_to elements_path
 else
   flash[:error] = "Record destroy successfully."
   render element_path(@element)
 end
end
您可以相应地更改方法。希望能有所帮助。

来自rails api:

has_和_belnogs_to_many:指定与另一个类的多对多关系。这将通过中间联接表关联两个类。除非将联接表显式指定为选项,否则将使用类名的词法顺序猜测联接表。因此,开发人员和项目之间的联接将给出默认联接表名“developers\u projects”,因为“D”的级别高于“P”

所以你需要确保你有一张叫做


elements\u muscle\u group
带有
element\u id:integer
muscle\u group\u id:integer
的迁移文件如下所示

class CreateElementsMuscleGroups < ActiveRecord::Migration
  def change
    create_table :elements_muscle_groups do |t|
      t.integer  :element_id
      t.integer  :muscle_group_id
      t.timestamps
    end
  end
end
class-createElementsMasGroups

运行此迁移。。这将解决问题。

您的路线肯定有问题。您可能没有正确定义路由。您需要像以前一样运行迁移以创建联接表,您是否也遇到同样的问题而无法解决?