我想在posts这个controller中的show.rhtml中render另一个controller comments中new.rhtml,以达到在一个post下显示快速回复的功能,代码如下:
PostController
-
def
show
-
@post
= Post.find(params[
:id
])
-
@comment_pages
,
@comments
= find_comments_by_post_id(
@post
.id)
-
end
在/posts/show.rhtml中调用了两次render,分别用来显示一个post对应的评论列表以及一个快速回复form:
/post/show.rhtml
-
<%
for
column
in
Post.content_columns %>
-
<p>
-
<b><%= column.human_name %>:</b> <%=h
@post
.send(column.name) %>
-
</p>
-
<%
end
%>
-
<p>
-
<%= link_to 'Edit',
:action
=> 'edit',
:id
=>
@post
%>
-
<%= link_to 'Back',
:action
=> 'list' %>
-
</p>
-
<DIV>
-
<%= render '/comments/list' %>
-
</DIV>
-
<DIV>
-
<%= render '/comments/
new
' %>
-
</DIV>
-
/comments/list.rhtml和/comments/new由scaffold自动生成,基本没有修改,所有需要的数据都经过instance variable传递,此处发现在render '/comments/new'的时候出现问题,scaffold自动生成经过我删除无关字段后的'/comments/new.rhtml':
ruby 代码
-
fast comments:
-
<% form_tag
:action
=> 'create'
do
%>
-
<%= render
:partial
=> 'form' %>
-
<%= submit_tag
"Create"
%>
-
<%
end
%>
错误的展现页面在附件中,明明应该显示/comments下的new.rhtml,但实际展现的确看起来很想/posts/下的edit。
后来观察/comments/new.rhtml,突然想到这个里面又render了_form.rhtml这个文件,问题会不会出在这个多次的render上面,经过实验,发现果然如此,将上述代码改为:
ruby 代码
-
fast comments:
-
<% form_tag
:action
=> 'create'
do
%>
-
<%= render
:partial
=> '/comments/form' %>
-
<%= submit_tag
"Create"
%>
-
<%
end
%>
注意在render partial的时候指定了_form的完整路径,这下终于显示正常了,没有看rails的源代码,不过通过这个问题猜想rails在render的时候,如果没有指定完整路径(从app/views/开始),会尝试render当前controller下的同名文件。为了证明,首先将/comments/new.rhtml中的render改为最初出现错误的版本,然后将posts下的_form.rhtml改名,再次调用show方法,果然报错,提示无法找到/posts/_form.rhtml文件。
错误最终解决,发现自己对rails的了解还是刚刚知道一点儿皮毛。这个小玩意儿弄完了一定要好好研究下rails的source code。
分享到:
相关推荐
在本例中,`render`方法添加了一个按钮和一个无序列表到`el`内。`this.$el.append`使用jQuery选择器和方法操作DOM。 6. **事件处理函数**: `addItem`方法是事件处理器,当用户点击按钮时被调用。它增加`counter`...
在路由处理函数中,通过`ctx.Render`方法渲染"index.tmpl"模板,并传递一个包含"Title"键的接口映射,这个键值会被用于替换模板中的相应占位符。 renders中间件还支持多种高级特性,比如嵌套模板、部分视图、模板...
在JavaScript编程中,jQuery是一个非常流行的库,它极大地简化了DOM操作、事件处理和Ajax交互。然而,对于大型应用,仅仅依赖jQuery可能不足以实现良好的代码组织和可维护性。因此,一些开发者提出了在jQuery基础上...
在React-Native这样的跨平台框架中,View是Component的render函数,Component自身则包含了Controller的功能,而Model依旧独立。 ViewModel的出现使得业务逻辑与视图逻辑分离,降低了耦合度。以登录场景为例,...
"Laravel开发-render .zip"可能是一个包含Laravel项目源代码、相关资源和文档的压缩文件,用于帮助开发者学习或快速搭建基于Laravel的渲染系统。 在Laravel框架中,“render”通常指的是视图渲染过程,即把blade...
综上所述,"render-public-portlet-5.2.6.1.zip_5 to 1" 是一个教育性的Liferay Portlet,用于演示如何在Liferay平台上进行项目开发,同时它也代表了一次从5到1的重大改进,可能包含了性能优化、功能精简或用户体验...
在Yii框架中,页面输出渲染是一个基础且核心的操作,这一过程涉及到视图(View)和控制器(Controller)之间的交互。在这个过程中,render和renderPartial这两个方法起到了非常重要的作用,它们都是用于渲染视图的,...
微信小程序通过 Data 构建...> 在 Rails 程序中,客户端的请求 (request) 会到达对应的 Controller 实例,然后由这个 Controller 实例中的对应的 action 来处理请求, > 处理后的数据会通过 render 方法响应给客户端。
在构建Web应用程序时,视图和控制器是两个关键的概念,它们在MVC(模型-视图-控制器)架构中起着至关重要的作用。EncorePHP是一个轻量级的PHP框架,它提供了简单而强大的工具来处理视图加载和控制器操作。让我们深入...
JavaScript MVC框架是当前Web开发中的热门话题之一,MVC全称为Model-View-Controller,分别对应模型、视图和控制器三个部分。该框架的出现解决了传统的JavaScript开发中遇到的问题,如代码混乱、难以维护和扩展等...
在Ext JS中,所有的MVC程序都是从Application类的一个实例开始的,该实例包含了应用程序的全局变量,如应用名称,同时定义了所需的Models、Views和Controllers。 #### 三、Application类的实例化 在Ext JS中,每个...
在 Controller 中,使用 `await ctx.render('render-demo', data);` 渲染 View 文件夹下的名叫 `render-demo` 的 HTML 文件,`data` 是传输过去给 HTML 页面的数据。 安装 Sequelize 插件 首先,安装 Sequelize ...
在Laravel框架中,路由(Route)和视图(View)助手是开发者日常工作中不可或缺的工具,它们极大地简化了Web应用的开发流程。本篇文章将深入探讨“Laravel开发-laravel-route-view-helper”这一主题,旨在帮助你更好...
在这个例子中,`render()` 方法接受一个模板文件名和一个数据数组。它使用 `ob_start()` 和 `ob_get_clean()` 来捕获输出缓冲区的内容,这允许我们动态生成和返回 HTML。`extract()` 函数则将数据数组中的键值对作为...
需要注意的是,当我们启用 history 模式的时候,由于我们的项目是一个单页面应用,所以在路由跳转的时候,就会出现访问不到静态资源而出现 404 的情况,这时候就需要服务端增加一个覆盖所有情况的候选资源:如果 URL...
在**Action**控制器中自定义**Smarty**模板引擎主要涉及以下几个步骤: 1. **禁止默认渲染**:通过`$this->_helper->viewRenderer->setNoRender();`来禁用默认的视图渲染机制。 2. **加载配置文件**:使用`Zend_...
(Robocop)在MVC中创建控制器/视图 JavaScript v8引擎和您的Java模型中的经验[框架测试经验] 在/ conf / routes中映射您的路由 # Home page GET / app.index 在javascript / coffeScript中实现您的控制器 app . ...
DispatcherServlet 负责接收请求并分发给合适的处理程序,通常是一个实现了 Controller 接口的类。Controller 处理业务逻辑,与模型交互,然后将数据传递给视图进行渲染。Model 存储应用程序数据,而 View 负责展示...
在.NET框架中,MVC(Model-View-Controller)模式是一种流行的应用程序开发架构,用于构建可维护性和可扩展性良好的Web应用。而RDLC(Report Definition Language Client Reports)是微软提供的一种报表设计工具,...