rails尝试从非现有表中销毁

时间:2013-07-16 06:31:41

标签: 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

当我尝试在浏览器中单击该删除并且clik确定它表示它无法从未存在的表elements_muscle_groups中删除时,为什么他还试图从该不存在的表中删除?

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

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

对不起,请向eng和ty寻求帮助。

enter image description here

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

元素 has_and_belongs_to_many :muscle_groups

MuscleGroup has_and_belongs_to_many :elements

所以也许它应该从elements_muscle_groups中删除,但为什么那个表不存在呢?

3 个答案:

答案 0 :(得分:0)

我没有使用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

您可以相应地更改方法。希望它会有所帮助。

答案 1 :(得分:0)

来自rails api:

http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_and_belongs_to_many

  

has_and_belnogs_to_many:指定与另一个类的多对多关系。这通过中间连接表关联两个类。除非将连接表明确指定为选项,否则使用类名的词法顺序进行猜测。因此,Developer和Project之间的连接将提供默认的连接表名称“developers_projects”,因为“D”超出“P”。

所以你需要确保你有一个名为

的表

elements_muscle_groupselement_id: integermuscle_group_id:integer

答案 2 :(得分:0)

迁移文件将如下所示,

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

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