我有一个模型被它所持有的参数区别对待,例如它就像一个字符表,它也用于非玩家角色,因为它们共享所有相同的属性。所以它会有一个布尔或整数,表示它是一个玩家角色还是一个非玩家角色。并且将使用随机状态参数和名称自动生成非玩家角色。
由于两者使用的方法完全不同,我认为为它们设置不同的控制器类是合乎逻辑的,但这会使单个模型有两个不同的控制器,并且感觉有点奇怪。
这是不好的做法吗?我应该在一个控制器中完成所有编码吗?
答案 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中的默认设置是非常基本的。随意扩展基础知识。