控制器是否从Rails中的模型扩展?

时间:2017-08-23 07:55:49

标签: ruby-on-rails ruby

一直在研究Rails,我可以不知道如何在创建基本CRUD应用程序时在model.rb文件中写入几乎没有任何内容。

我正在查看一个controller.rb文件,并想知道为什么控制器文件可以访问所有模型方法,并在两个文件之间似乎没有连接时创建。

是否应该将modelname.all和modelname.create等模型对象方法写入模型文件而不是控制器文件?

2 个答案:

答案 0 :(得分:2)

TL; DR

不,它没有。

一般答案

控制器不会have access按照您的想法对方法进行建模,在您永远不会写allcreate的控制器中,您可以编写User.all或{{ 1}}。您正在调用模型类或实例上的方法。您只是在控制器中使用该模型,但这不仅限于控制器,如果您真的想要,您可以在视图中执行完全相同的操作,或者您可以创建自定义服务对象,策略对象或存储库对象,你仍然可以从他们内部呼叫@user.create等。

对于一个非常基本的应用程序,你可以通过编写很少或没有逻辑来获得,但这只是因为Rails为我们提供了方法并为我们做了一切(万岁!)。

答案 1 :(得分:1)

模型文件中的任何内容都不代表对此特定模型的任何特定 ...继承自ApplicationRecordActiveRecord::Base意味着您已内置所有类方法({ {1}},allwherefind等)以及所有实例方法(find_bynewcreate等)为模型预先定义。

控制器确定需要发生什么,模型有实现它的方法,所以

update_attributes

表示在显示所有模型记录列表时,您可以访问模型的类方法def index @model = Model.all end