我的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)
答案 0 :(得分:0)
我可以在您提供的代码中看到几个问题。
由于第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
无论如何,感谢参与!