在Ruby on Rails中为一个模型安装两个控制器是不好的做法吗?

时间:2011-02-20 01:56:28

标签: ruby-on-rails design-patterns data-modeling

我有一个模型被它所持有的参数区别对待,例如它就像一个字符表,它也用于非玩家角色,因为它们共享所有相同的属性。所以它会有一个布尔或整数,表示它是一个玩家角色还是一个非玩家角色。并且将使用随机状态参数和名称自动生成非玩家角色。

由于两者使用的方法完全不同,我认为为它们设置不同的控制器类是合乎逻辑的,但这会使单个模型有两个不同的控制器,并且感觉有点奇怪。

这是不好的做法吗?我应该在一个控制器中完成所有编码吗?

2 个答案:

答案 0 :(得分:6)

实际上听起来我应该有两种不同的型号。如果您与对象交互的方式完全不同,正如您所解释的那样,那么它们实际上不应该是同一个类。 Ruby有一个很好的方法来处理这种情况:模块。您可以使用模块为对象创建共享行为。您甚至可以通过覆盖ActiveRecord表名将非播放器字符和字符存储在同一个数据库表中。例如:

module Character
  def decrease_hitpoints x
    ...
  end
  # other shared functionality can go here
end

class PlayerCharacter < ActiveRecord::Base
  set_table_name 'characters'
  include Character
end

class NonPlayerCharacter < ActiveRecord::Base
  set_table_name 'characters'
  include Character
end

在此示例中,PlayerCharacter和NonPlayerCharacter共享在Character中定义的相同表名和功能,但它们是不同的对象。

最后,对一个模型使用两个或更多控制器是完全没问题的,就像构建一个完全不依赖于模型的控制器一样好。

答案 1 :(得分:1)

这完全没问题。您所描述的是基于任务的用户界面,您对捕获工作流程或流程更感兴趣,而不是简单的CRUD或资源操作。请记住,Rails中的默认设置是非常基本的。随意扩展基础知识。