一直在研究Rails,我可以不知道如何在创建基本CRUD应用程序时在model.rb文件中写入几乎没有任何内容。
我正在查看一个controller.rb文件,并想知道为什么控制器文件可以访问所有模型方法,并在两个文件之间似乎没有连接时创建。
是否应该将modelname.all和modelname.create等模型对象方法写入模型文件而不是控制器文件?
答案 0 :(得分:2)
不,它没有。
控制器不会have access
按照您的想法对方法进行建模,在您永远不会写all
或create
的控制器中,您可以编写User.all
或{{ 1}}。您正在调用模型类或实例上的方法。您只是在控制器中使用该模型,但这不仅限于控制器,如果您真的想要,您可以在视图中执行完全相同的操作,或者您可以创建自定义服务对象,策略对象或存储库对象,你仍然可以从他们内部呼叫@user.create
等。
对于一个非常基本的应用程序,你可以通过编写很少或没有逻辑来获得,但这只是因为Rails为我们提供了方法并为我们做了一切(万岁!)。
答案 1 :(得分:1)
模型文件中的任何内容都不代表对此特定模型的任何特定 ...继承自ApplicationRecord
或ActiveRecord::Base
意味着您已内置所有类方法({ {1}},all
,where
,find
等)以及所有实例方法(find_by
,new
,create
等)为模型预先定义。
控制器确定需要发生什么,模型有实现它的方法,所以
update_attributes
表示在显示所有模型记录列表时,您可以访问模型的类方法def index
@model = Model.all
end