gpt4 book ai didi

ruby-on-rails - 两个或多个 Controller 共享相同的投票操作(只是模型类不同)——如何创建一个 mixin 以包含在所有 Controller 中?

转载 作者:行者123 更新时间:2023-12-04 06:36:06 25 4
gpt4 key购买 nike

我是 Rails 的新手,我正在尝试创建一些通用代码并在多个 Controller 中重用它。基本上我使用的是 thumbs_up gem,它允许一些模型充当可投票的角色,而其他模型则充当投票者(例如用户模型)。

想象一下以下场景:

我有问答模型。问题有很多答案。问题和答案都是可投票的。

路线.rb:

resources :questions do

resources :answers do

member do
get 'vote_up'
get 'vote_down'
end

end

member do
get 'vote_up'
get 'vote_down'
end

end

我已经实现了一个解决方案,其中我的每个可投票模型都有自己的 Controller ,用于处理 vote_up 和 vote_down 操作。但是,在两个 Controller 中,这些操作基本相同,唯一的区别是用于查找要投票的实例的模型类。示例:

问题 Controller :

  def vote_up
@voteable = Question.find(params[:id])

current_user.vote_exclusively_for(@voteable)

respond_to do |format|
format.js { render :action => 'votes/vote_completed' }
end
end

AnswersContoller:

  def vote_up
@voteable = Answer.find(params[:id])

current_user.vote_exclusively_for(@voteable)

respond_to do |format|
format.js { render :action => 'votes/vote_completed' }
end
end

我想用这段代码创建一个 mixin 以包含在两个 Controller 中,任何人都可以阐明如何实现它吗? mixin 是否应该定义 vote_up 和 vote_down 方法?或者,mixin 是否应该实现一些辅助方法,然后在每个 Controller 的 vote_up 和 vote_down 方法中调用这些方法?

这是解决此问题的最佳方法还是应该只有一个 Controller 来处理 vote_up 和 vote_down 操作?

非常感谢您在这些问题上的帮助。非常感谢

布鲁诺

最佳答案

我宁愿采用多态方式,但对于您的 mixin(模块),解决方案可以是这样的:

问题 Controller

include Voting

投票模块:

module Voting
def vote_up
@voteable = Object.const_get(self.class.to_s.chomp('Controller').singularize).find(params[:id])
current_user.vote_exclusively_for(@voteable)

respond_to do |format|
format.js { render :action => 'votes/vote_completed' }
end
end
end

关于ruby-on-rails - 两个或多个 Controller 共享相同的投票操作(只是模型类不同)——如何创建一个 mixin 以包含在所有 Controller 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5116005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com