根据目前的理解,如果我不得不描述Rails应用程序的各个组件如何协同工作以响应请求,我会说以下内容:
1)路由确定哪些请求URL映射到哪些控制器方法。
2)控制器方法从模型中获取信息,并将该信息(以全局变量的形式)传递给相应的视图模板。
3)视图模板使用存储在全局变量中的数据来构造最终响应。
在上面的解释中,几个组件之间的关系是明确且不可否认的。即:
1)路线和控制方法
2)控制器方法和视图模板
实际上,上述关系是一对一的。
但是,模型类与其相邻组件类型(即控制器)之间的关系尚不清楚。是的,控制器从模型中检索信息,但请考虑以下事项:
1)控制器不必像静态网站那样需要从模型中检索信息。
2)控制器可以从多个模型类检索信息。
因此,可以准确地说模型与其他组件的存在略有不同吗?准确地说,模型类构成了应用程序后端的后端,而其他组件(即路由,控制器方法和视图模板)组成了紧密耦合的组件,线性机制,其中控制器根据需要浸入模型类中?更具体地说,准确地说,至少在导轨组件实际装配在一起的情况下,任何给定的控制器和任何给定的模型(例如,UserController和User)之间都没有自然的关系吗?
是的,我知道rails带有“ resources”关键字,可在路由文件中使用该关键字来生成RESTful路由,并且在rails中通常以RESTful方式完成操作。您可以说Rails有助于RESTful Web应用程序的开发。在RESTful应用程序的上下文中,模型和控制器彼此隐式相关。但这是REST架构风格的描述。我在问铁轨。在我看来,在rails本身中,模型仅在控制器用于实现控制器方法的范围内才与控制器相关-并且由于软件中的代码组织是任意的,因此这些关系是任意的。
我正在考虑这些事情,因为我想为用户添加一种查看自己的个人资料的方式。我已经有一个用户模型和一个控制器以及用于显示有关用户信息的视图。配置文件页面将显示来自用户模型的信息,但是我不想像显示其他用户信息那样使用相同的控制器或视图来查看用户自己的配置文件。因此,我计划为配置文件创建一个新的控制器和视图,但是使用User模型来检索显示的信息。这是一个任意决定,就像在构建应用程序时做出的其他任意决定一样。但是,如果出于某种原因,模型和控制器在导轨中保持紧密耦合(例如1对1),那将不是一个有效的决定。
任何人都可以确认或驳斥我在说什么吗?
有关MVC的详细说明,请查看Jeff Atwood的文章:http : //blog.codinghorror.com/understanding-model-view-controller/
现在,对于您的应用程序,一个控制器正好可以显示用户的个人资料页面。确保安全的方法是,对于UsersController#show操作(配置文件页面),您应验证它是当前用户,否则重定向或显示错误消息,或显示可编辑页面,等等。
@user = User.find(params[:id])
if current_user != @user
render :show
else
render :self_profile
end
您可以使用的另一种方法是:
@user = User.find(params[:id])
if current_user != @user
@authenticated_user = true
end
render :show
然后,在视图模板中,您可以有条件的:
<% if @authenticated_user %>
#Edit button here, takes you to the settings page
<% else %>
#Follow button here
<% end %>
current_user应该是在应用程序控制器中定义的helper_method。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句