los*_*oud 6 ruby model-view-controller ruby-on-rails-3
根据我目前的理解,如果我必须描述rails应用程序的各个组件如何协同工作以响应请求,我会说以下内容:
1)路由确定哪些请求URL映射到哪些控制器方法.
2)控制器方法从模型中获取信息,并将该信息(以全局变量的形式)传递给相应的视图模板.
3)视图模板使用存储在全局变量中的数据来构造最终响应.
在上面的解释中,几个组件之间的关系是清楚和不可否认的; 即:
1)路线和控制器方法
2)控制器方法和视图模板
实际上,上述关系是1比1.
但是,模型类与其相邻组件类型(即控制器)的关系并不明确.是的,控制器从模型中检索信息,但请考虑以下事项:
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
Run Code Online (Sandbox Code Playgroud)
您可以使用的另一种方法是:
@user = User.find(params[:id])
if current_user != @user
@authenticated_user = true
end
render :show
Run Code Online (Sandbox Code Playgroud)
然后在您的视图模板中,您可以有一个条件:
<% if @authenticated_user %>
#Edit button here, takes you to the settings page
<% else %>
#Follow button here
<% end %>
Run Code Online (Sandbox Code Playgroud)
current_user 应该是应用程序控制器中定义的 helper_method。
| 归档时间: |
|
| 查看次数: |
861 次 |
| 最近记录: |