Rails:以错误的顺序销毁

时间:2013-12-23 14:40:31

标签: ruby-on-rails ruby-on-rails-4

我的Rails应用中的destroy操作存在一些问题。 在我的应用程序中,我有模型UserVotes,允许用户互相投票。例如:John按顺序为其他用户投票:

Vote for User_1
Vote for User_2
Vote for User_3

当约翰想要删除他对User_3的投票时,他正在删除对User_1的投票,在重试后他删除了对User_2的投票,并且只有在两次尝试后他才会删除User_3的投票。 1}}

user_votes_controller:

class UserVotesController < ApplicationController

    def destroy
        @user_vote = UserVote.find_by(params[:recipient_uid])
        @user_vote.destroy
        redirect_to root_url
        flash[:warning] = 'Deleted'
    end

end

视图:

= link_to('Delete vote', user_vote, author_uid: current_user.uid, method: :delete)

3 个答案:

答案 0 :(得分:0)

我可以在您提供的代码中看到几个问题。

  1. 您似乎在给UserVote的find_by中提供了recipient_uid,它应该是uservote_id。
  2. 您正在通过传递作者ID来查找要销毁的投票,该投票ID不能作为投票中的唯一键。它只会返回您在投票表中的第一个条目。
  3. 由于第2点,您首先获得对用户1的投票,然后投票给用户2,依此类推。如果您希望我提供正确的解决方案,您将需要更多地解释用户,投票,user_vote的结构。

答案 1 :(得分:0)

模特:

class User < ActiveRecord::Base
  has_many :user_votes
  has_many :votes, :through => :user_votes
end

class Vote < ActiveRecord::Base
  has_many :user_votes
  has_many :users, :through => :user_votes
end

class UserVote < ActiveRecord::Base
  belongs_to :author, class_name: "User", :foreign_key => :author_uid
  belongs_to :recipient, class_name: "User", :foreign_key => :recipient_uid
  belongs_to :vote
end

视图

= link_to('Delete vote', user_vote_path(user_vote), method: :delete)

控制器

class UserVotesController < ApplicationController

    def destroy
        @user_vote = UserVote.find_by(params[:id])
        @vote = @user_vote.vote
        @vote.destroy
        @user_vote.destroy
        redirect_to root_url
        flash[:warning] = 'Deleted'
    end

end

答案 2 :(得分:0)

解决方案非常简单。我刚刚在users_votes controller中重写了动作destroy

class UserVotesController < ApplicationController

    def destroy
        @user_vote = UserVote.find(params[:id])
        @user_vote.destroy
        redirect_to root_url
        flash[:warning] = 'Deleted'
    end

end

无论如何,感谢参与!