Ruby on rails Rails销毁操作销毁错误记录

Ruby on rails Rails销毁操作销毁错误记录,ruby-on-rails,heroku,controller,destroy,Ruby On Rails,Heroku,Controller,Destroy,我发布了一个类似的问题,我认为我已经解决了这个问题,但我错了。我原以为该活动没有被删除,但后来发现它正在删除活动,这只是一个错误的活动。我的其他任何型号都没有这个问题,这只发生在我的一个应用程序上。我的分叉应用程序具有完全相同的代码,可以正常工作。我不知道为什么会这样 projects\u controller.rb class ProjectsController < ApplicationController before_filter :find_project, only

我发布了一个类似的问题,我认为我已经解决了这个问题,但我错了。我原以为该活动没有被删除,但后来发现它正在删除活动,这只是一个错误的活动。我的其他任何型号都没有这个问题,这只发生在我的一个应用程序上。我的分叉应用程序具有完全相同的代码,可以正常工作。我不知道为什么会这样

projects\u controller.rb

class ProjectsController < ApplicationController

    before_filter :find_project, only: [:edit, :update, :destroy]

    def create
        params[:project][:about] = sanitize_redactor(params[:project][:about])
        @project = current_member.projects.new(params[:project])

        respond_to do |format|
          if @project.save
            current_member.create_activity(@project, 'created')
            format.html { redirect_to @project }
            format.json { render json: @project, status: :created, location: @project }
          else
            format.html { render action: "new" }
            format.json { render json: @project.errors, alert: 'Please make sure all required fields are filled in and all fields are formatted correctly.' }
          end
       end
    end

    def destroy
        @project = Project.find(params[:id])
        @activity = Activity.find_by_targetable_id(params[:id])
        if @activity
            @activity.destroy
        end
        @project.destroy

        respond_to do |format|
          format.html { redirect_to profile_projects_path(current_member) }
          format.json { head :no_content }
          format.js
        end
    end

    def find_project
        @project = current_member.projects.find(params[:id])
    end 

end
class Member < ActiveRecord::Base

    def create_activity(item, action)
        activity = activities.new
        activity.targetable = item
        activity.action = action 
        activity.save 
        activity
    end

end
class Activity < ActiveRecord::Base
    belongs_to :member
    belongs_to :targetable, polymorphic: true
    acts_as_votable

    self.per_page = 36

    def self.for_member(member, options={})
        options[:page] ||= 1
        following_ids = member.following_members.map(&:id).push(member.id)
        where("member_id in (?)", following_ids).
            order("created_at desc").
            page(options[:page])
    end 

end
class Project < ActiveRecord::Base
    belongs_to :member

    attr_accessible :about, :blurb, :category, :markers, :video, :website, :name, :avatar, :banner, :marker_list, :city

    acts_as_votable
    acts_as_followable
    acts_as_ordered_taggable
    acts_as_ordered_taggable_on :markers
    acts_as_messageable
    has_many :comments, as: :commentable, :dependent => :destroy
    has_many :uploads, as: :uploadable, :dependent => :destroy
    has_many :updates, as: :updateable, :dependent => :destroy

    def to_param
        "#{id}-#{name.parameterize}"
    end  

end
class Member < ActiveRecord::Base
    # Include default devise modules. Others available are:
    # :confirmable, :lockable, :timeoutable and :omniauthable
    devise :database_authenticatable, :registerable,
    :recoverable, :rememberable, :trackable, :validatable

    # Setup accessible (or protected) attributes for your model
    attr_accessible :email, :email_confirmation, :password, :password_confirmation, :remember_me,
        :full_name, :user_name, :pursuits, :avatar, :bio, :city, :state, :country, :pursuit_list, 
        :facebook, :twitter, :linkedin, :soundcloud, :youtube, :vimeo, :instagram, :flickr, :google, :pinterest, :blog, :website, :banner

    has_many :medium, :dependent => :destroy
    has_many :projects, :dependent => :destroy
    has_many :events, :dependent => :destroy
    has_many :statuses, :dependent => :destroy
    has_many :activities, :dependent => :destroy
    has_many :listings, :dependent => :destroy
    has_many :comments, :dependent => :destroy
    has_many :uploads, :dependent => :destroy
    has_many :updates, :dependent => :destroy
    has_many :assets, :dependent => :destroy
    acts_as_follower
    acts_as_followable
    acts_as_ordered_taggable
    acts_as_ordered_taggable_on :pursuits
    acts_as_voter
    acts_as_messageable

    def to_param
        user_name
    end 

    def name
        user_name
    end 

    def mailboxer_email(object)
        return user_name
    end

    def create_activity(item, action)
        activity = activities.new
        activity.targetable = item
        activity.action = action 
        activity.save 
        activity
    end

end
class ProjectsController
member.rb

class ProjectsController < ApplicationController

    before_filter :find_project, only: [:edit, :update, :destroy]

    def create
        params[:project][:about] = sanitize_redactor(params[:project][:about])
        @project = current_member.projects.new(params[:project])

        respond_to do |format|
          if @project.save
            current_member.create_activity(@project, 'created')
            format.html { redirect_to @project }
            format.json { render json: @project, status: :created, location: @project }
          else
            format.html { render action: "new" }
            format.json { render json: @project.errors, alert: 'Please make sure all required fields are filled in and all fields are formatted correctly.' }
          end
       end
    end

    def destroy
        @project = Project.find(params[:id])
        @activity = Activity.find_by_targetable_id(params[:id])
        if @activity
            @activity.destroy
        end
        @project.destroy

        respond_to do |format|
          format.html { redirect_to profile_projects_path(current_member) }
          format.json { head :no_content }
          format.js
        end
    end

    def find_project
        @project = current_member.projects.find(params[:id])
    end 

end
class Member < ActiveRecord::Base

    def create_activity(item, action)
        activity = activities.new
        activity.targetable = item
        activity.action = action 
        activity.save 
        activity
    end

end
class Activity < ActiveRecord::Base
    belongs_to :member
    belongs_to :targetable, polymorphic: true
    acts_as_votable

    self.per_page = 36

    def self.for_member(member, options={})
        options[:page] ||= 1
        following_ids = member.following_members.map(&:id).push(member.id)
        where("member_id in (?)", following_ids).
            order("created_at desc").
            page(options[:page])
    end 

end
class Project < ActiveRecord::Base
    belongs_to :member

    attr_accessible :about, :blurb, :category, :markers, :video, :website, :name, :avatar, :banner, :marker_list, :city

    acts_as_votable
    acts_as_followable
    acts_as_ordered_taggable
    acts_as_ordered_taggable_on :markers
    acts_as_messageable
    has_many :comments, as: :commentable, :dependent => :destroy
    has_many :uploads, as: :uploadable, :dependent => :destroy
    has_many :updates, as: :updateable, :dependent => :destroy

    def to_param
        "#{id}-#{name.parameterize}"
    end  

end
class Member < ActiveRecord::Base
    # Include default devise modules. Others available are:
    # :confirmable, :lockable, :timeoutable and :omniauthable
    devise :database_authenticatable, :registerable,
    :recoverable, :rememberable, :trackable, :validatable

    # Setup accessible (or protected) attributes for your model
    attr_accessible :email, :email_confirmation, :password, :password_confirmation, :remember_me,
        :full_name, :user_name, :pursuits, :avatar, :bio, :city, :state, :country, :pursuit_list, 
        :facebook, :twitter, :linkedin, :soundcloud, :youtube, :vimeo, :instagram, :flickr, :google, :pinterest, :blog, :website, :banner

    has_many :medium, :dependent => :destroy
    has_many :projects, :dependent => :destroy
    has_many :events, :dependent => :destroy
    has_many :statuses, :dependent => :destroy
    has_many :activities, :dependent => :destroy
    has_many :listings, :dependent => :destroy
    has_many :comments, :dependent => :destroy
    has_many :uploads, :dependent => :destroy
    has_many :updates, :dependent => :destroy
    has_many :assets, :dependent => :destroy
    acts_as_follower
    acts_as_followable
    acts_as_ordered_taggable
    acts_as_ordered_taggable_on :pursuits
    acts_as_voter
    acts_as_messageable

    def to_param
        user_name
    end 

    def name
        user_name
    end 

    def mailboxer_email(object)
        return user_name
    end

    def create_activity(item, action)
        activity = activities.new
        activity.targetable = item
        activity.action = action 
        activity.save 
        activity
    end

end
类成员
迁移

class CreateActivities < ActiveRecord::Migration
    def change
        create_table :activities do |t|
            t.integer :member_id
            t.string :action

            t.integer :targetable_id
            t.string :targetable_type

            t.timestamps
        end

        add_index :activities, :member_id
        add_index :activities, [:targetable_id, :targetable_type]

    end
end
class-CreateActivities
****编辑****

活动.rb

class ProjectsController < ApplicationController

    before_filter :find_project, only: [:edit, :update, :destroy]

    def create
        params[:project][:about] = sanitize_redactor(params[:project][:about])
        @project = current_member.projects.new(params[:project])

        respond_to do |format|
          if @project.save
            current_member.create_activity(@project, 'created')
            format.html { redirect_to @project }
            format.json { render json: @project, status: :created, location: @project }
          else
            format.html { render action: "new" }
            format.json { render json: @project.errors, alert: 'Please make sure all required fields are filled in and all fields are formatted correctly.' }
          end
       end
    end

    def destroy
        @project = Project.find(params[:id])
        @activity = Activity.find_by_targetable_id(params[:id])
        if @activity
            @activity.destroy
        end
        @project.destroy

        respond_to do |format|
          format.html { redirect_to profile_projects_path(current_member) }
          format.json { head :no_content }
          format.js
        end
    end

    def find_project
        @project = current_member.projects.find(params[:id])
    end 

end
class Member < ActiveRecord::Base

    def create_activity(item, action)
        activity = activities.new
        activity.targetable = item
        activity.action = action 
        activity.save 
        activity
    end

end
class Activity < ActiveRecord::Base
    belongs_to :member
    belongs_to :targetable, polymorphic: true
    acts_as_votable

    self.per_page = 36

    def self.for_member(member, options={})
        options[:page] ||= 1
        following_ids = member.following_members.map(&:id).push(member.id)
        where("member_id in (?)", following_ids).
            order("created_at desc").
            page(options[:page])
    end 

end
class Project < ActiveRecord::Base
    belongs_to :member

    attr_accessible :about, :blurb, :category, :markers, :video, :website, :name, :avatar, :banner, :marker_list, :city

    acts_as_votable
    acts_as_followable
    acts_as_ordered_taggable
    acts_as_ordered_taggable_on :markers
    acts_as_messageable
    has_many :comments, as: :commentable, :dependent => :destroy
    has_many :uploads, as: :uploadable, :dependent => :destroy
    has_many :updates, as: :updateable, :dependent => :destroy

    def to_param
        "#{id}-#{name.parameterize}"
    end  

end
class Member < ActiveRecord::Base
    # Include default devise modules. Others available are:
    # :confirmable, :lockable, :timeoutable and :omniauthable
    devise :database_authenticatable, :registerable,
    :recoverable, :rememberable, :trackable, :validatable

    # Setup accessible (or protected) attributes for your model
    attr_accessible :email, :email_confirmation, :password, :password_confirmation, :remember_me,
        :full_name, :user_name, :pursuits, :avatar, :bio, :city, :state, :country, :pursuit_list, 
        :facebook, :twitter, :linkedin, :soundcloud, :youtube, :vimeo, :instagram, :flickr, :google, :pinterest, :blog, :website, :banner

    has_many :medium, :dependent => :destroy
    has_many :projects, :dependent => :destroy
    has_many :events, :dependent => :destroy
    has_many :statuses, :dependent => :destroy
    has_many :activities, :dependent => :destroy
    has_many :listings, :dependent => :destroy
    has_many :comments, :dependent => :destroy
    has_many :uploads, :dependent => :destroy
    has_many :updates, :dependent => :destroy
    has_many :assets, :dependent => :destroy
    acts_as_follower
    acts_as_followable
    acts_as_ordered_taggable
    acts_as_ordered_taggable_on :pursuits
    acts_as_voter
    acts_as_messageable

    def to_param
        user_name
    end 

    def name
        user_name
    end 

    def mailboxer_email(object)
        return user_name
    end

    def create_activity(item, action)
        activity = activities.new
        activity.targetable = item
        activity.action = action 
        activity.save 
        activity
    end

end
类活动
project.rb

class ProjectsController < ApplicationController

    before_filter :find_project, only: [:edit, :update, :destroy]

    def create
        params[:project][:about] = sanitize_redactor(params[:project][:about])
        @project = current_member.projects.new(params[:project])

        respond_to do |format|
          if @project.save
            current_member.create_activity(@project, 'created')
            format.html { redirect_to @project }
            format.json { render json: @project, status: :created, location: @project }
          else
            format.html { render action: "new" }
            format.json { render json: @project.errors, alert: 'Please make sure all required fields are filled in and all fields are formatted correctly.' }
          end
       end
    end

    def destroy
        @project = Project.find(params[:id])
        @activity = Activity.find_by_targetable_id(params[:id])
        if @activity
            @activity.destroy
        end
        @project.destroy

        respond_to do |format|
          format.html { redirect_to profile_projects_path(current_member) }
          format.json { head :no_content }
          format.js
        end
    end

    def find_project
        @project = current_member.projects.find(params[:id])
    end 

end
class Member < ActiveRecord::Base

    def create_activity(item, action)
        activity = activities.new
        activity.targetable = item
        activity.action = action 
        activity.save 
        activity
    end

end
class Activity < ActiveRecord::Base
    belongs_to :member
    belongs_to :targetable, polymorphic: true
    acts_as_votable

    self.per_page = 36

    def self.for_member(member, options={})
        options[:page] ||= 1
        following_ids = member.following_members.map(&:id).push(member.id)
        where("member_id in (?)", following_ids).
            order("created_at desc").
            page(options[:page])
    end 

end
class Project < ActiveRecord::Base
    belongs_to :member

    attr_accessible :about, :blurb, :category, :markers, :video, :website, :name, :avatar, :banner, :marker_list, :city

    acts_as_votable
    acts_as_followable
    acts_as_ordered_taggable
    acts_as_ordered_taggable_on :markers
    acts_as_messageable
    has_many :comments, as: :commentable, :dependent => :destroy
    has_many :uploads, as: :uploadable, :dependent => :destroy
    has_many :updates, as: :updateable, :dependent => :destroy

    def to_param
        "#{id}-#{name.parameterize}"
    end  

end
class Member < ActiveRecord::Base
    # Include default devise modules. Others available are:
    # :confirmable, :lockable, :timeoutable and :omniauthable
    devise :database_authenticatable, :registerable,
    :recoverable, :rememberable, :trackable, :validatable

    # Setup accessible (or protected) attributes for your model
    attr_accessible :email, :email_confirmation, :password, :password_confirmation, :remember_me,
        :full_name, :user_name, :pursuits, :avatar, :bio, :city, :state, :country, :pursuit_list, 
        :facebook, :twitter, :linkedin, :soundcloud, :youtube, :vimeo, :instagram, :flickr, :google, :pinterest, :blog, :website, :banner

    has_many :medium, :dependent => :destroy
    has_many :projects, :dependent => :destroy
    has_many :events, :dependent => :destroy
    has_many :statuses, :dependent => :destroy
    has_many :activities, :dependent => :destroy
    has_many :listings, :dependent => :destroy
    has_many :comments, :dependent => :destroy
    has_many :uploads, :dependent => :destroy
    has_many :updates, :dependent => :destroy
    has_many :assets, :dependent => :destroy
    acts_as_follower
    acts_as_followable
    acts_as_ordered_taggable
    acts_as_ordered_taggable_on :pursuits
    acts_as_voter
    acts_as_messageable

    def to_param
        user_name
    end 

    def name
        user_name
    end 

    def mailboxer_email(object)
        return user_name
    end

    def create_activity(item, action)
        activity = activities.new
        activity.targetable = item
        activity.action = action 
        activity.save 
        activity
    end

end
class项目:destroy
有很多:uploads,as::uploadable,:dependent=>:destroy
有很多:更新,如::可更新,:依赖=>:销毁
def至_参数
“#{id}-#{name.parameterize}”
结束
结束
member.rb

class ProjectsController < ApplicationController

    before_filter :find_project, only: [:edit, :update, :destroy]

    def create
        params[:project][:about] = sanitize_redactor(params[:project][:about])
        @project = current_member.projects.new(params[:project])

        respond_to do |format|
          if @project.save
            current_member.create_activity(@project, 'created')
            format.html { redirect_to @project }
            format.json { render json: @project, status: :created, location: @project }
          else
            format.html { render action: "new" }
            format.json { render json: @project.errors, alert: 'Please make sure all required fields are filled in and all fields are formatted correctly.' }
          end
       end
    end

    def destroy
        @project = Project.find(params[:id])
        @activity = Activity.find_by_targetable_id(params[:id])
        if @activity
            @activity.destroy
        end
        @project.destroy

        respond_to do |format|
          format.html { redirect_to profile_projects_path(current_member) }
          format.json { head :no_content }
          format.js
        end
    end

    def find_project
        @project = current_member.projects.find(params[:id])
    end 

end
class Member < ActiveRecord::Base

    def create_activity(item, action)
        activity = activities.new
        activity.targetable = item
        activity.action = action 
        activity.save 
        activity
    end

end
class Activity < ActiveRecord::Base
    belongs_to :member
    belongs_to :targetable, polymorphic: true
    acts_as_votable

    self.per_page = 36

    def self.for_member(member, options={})
        options[:page] ||= 1
        following_ids = member.following_members.map(&:id).push(member.id)
        where("member_id in (?)", following_ids).
            order("created_at desc").
            page(options[:page])
    end 

end
class Project < ActiveRecord::Base
    belongs_to :member

    attr_accessible :about, :blurb, :category, :markers, :video, :website, :name, :avatar, :banner, :marker_list, :city

    acts_as_votable
    acts_as_followable
    acts_as_ordered_taggable
    acts_as_ordered_taggable_on :markers
    acts_as_messageable
    has_many :comments, as: :commentable, :dependent => :destroy
    has_many :uploads, as: :uploadable, :dependent => :destroy
    has_many :updates, as: :updateable, :dependent => :destroy

    def to_param
        "#{id}-#{name.parameterize}"
    end  

end
class Member < ActiveRecord::Base
    # Include default devise modules. Others available are:
    # :confirmable, :lockable, :timeoutable and :omniauthable
    devise :database_authenticatable, :registerable,
    :recoverable, :rememberable, :trackable, :validatable

    # Setup accessible (or protected) attributes for your model
    attr_accessible :email, :email_confirmation, :password, :password_confirmation, :remember_me,
        :full_name, :user_name, :pursuits, :avatar, :bio, :city, :state, :country, :pursuit_list, 
        :facebook, :twitter, :linkedin, :soundcloud, :youtube, :vimeo, :instagram, :flickr, :google, :pinterest, :blog, :website, :banner

    has_many :medium, :dependent => :destroy
    has_many :projects, :dependent => :destroy
    has_many :events, :dependent => :destroy
    has_many :statuses, :dependent => :destroy
    has_many :activities, :dependent => :destroy
    has_many :listings, :dependent => :destroy
    has_many :comments, :dependent => :destroy
    has_many :uploads, :dependent => :destroy
    has_many :updates, :dependent => :destroy
    has_many :assets, :dependent => :destroy
    acts_as_follower
    acts_as_followable
    acts_as_ordered_taggable
    acts_as_ordered_taggable_on :pursuits
    acts_as_voter
    acts_as_messageable

    def to_param
        user_name
    end 

    def name
        user_name
    end 

    def mailboxer_email(object)
        return user_name
    end

    def create_activity(item, action)
        activity = activities.new
        activity.targetable = item
        activity.action = action 
        activity.save 
        activity
    end

end
类成员:破坏
拥有多个:项目,:依赖=>:销毁
有多个:事件,:依赖=>:销毁
有许多:状态,:依赖=>:销毁
有多个:活动,:依赖=>:销毁
拥有多个:列表,:dependent=>:destroy
有很多:注释,:依赖=>:销毁
有很多:上传,:依赖=>:销毁
有多个:更新,:依赖=>:销毁
拥有多个:资产,:依赖=>:销毁
充当追随者
作为可遵循的行为
按命令行事
按命令行事:追求
充当选民
充当可发送消息的角色
def至_参数
用户名
结束
定义名称
用户名
结束
def mailboxer_电子邮件(对象)
返回用户名
结束
def创建_活动(项目、操作)
activity=activities.new
activity.targetable=项目
activity.action=动作
activity.save
活动
结束
结束
有趣

--

活动模型

您提到的是
活动
模型没有正确销毁。考虑到这一点,您将希望了解有助于销毁机制的所有步骤:

def destroy
   ...
   @activity = Activity.find_by_targetable_id(params[:id])
   @activity.destroy if @activity
第一件事优先-什么是
targetable\u id
?此外,如果您使用的是Rails 4,则可以使用属性哈希的方法:

@activity = Activity.find_by targetable_id: params[:id]
这可能是问题的主要原因-上述代码基本上会查找任何
活动
记录,这些记录的
targetable_id
属性与您从请求中传递的
id
参数相同

我不是个好人