我正在努力实现以下目标:我有一个项目编辑页面,我在其中显示字段以编辑项目详细信息。
下面我将展示分配给该项目的任务列表。
<h1>Editing Project</h1>
<%= render 'form', project: @project %>
<%= render '/project_tasks/index', action: 'index', controller: 'ProjectTasks' %>
<%= link_to 'Show', @project %> |
<%= link_to 'Back', projects_path %>
如上所示,我正在尝试调用控制器'ProjectTasks'的名为“index”的动作方法
以下是ProjectTasks控制器的代码:
class ProjectTasksController < ApplicationController
def index
@project_clients = ProjectTask.all
@myname='xyz'
render :partial
end
end
部分视图文本:\ views \ project_tasks_index.html.erb
<h1> Im partial : my name is <%= @myname%></h1>
我得到的输出是: {编辑表单字段+}以及以下部分视图中的文本
Im partial : my name is
如“xyz”所示,不打印实例变量的值。
经过一些研究后我发现,我的代码直接呈现视图,而不调用action方法。这是不支持rails?
我来自asp.net mvc背景,这可以在asp.net中实现,如下所示:
@{Html.RenderAction("ProjectUserList", new { projectId = Model.Id }); }
粘贴只是为了让我的观点更清楚,它的作用是,它执行方法而不是直接渲染视图。
总结一下,我的期望是
edit.html.erb - &gt;从project_tasks控制器调用渲染动作 - &gt;我在那里设置@myname - &gt;它然后呈现局部视图 - &gt;视图显示@myname值。
我不想在项目控制器的编辑方法中设置@myname,而是在project_tasks控制器的索引方法中设置它。这样我的编辑视图或操作就不知道部分视图需要什么数据,它负责提供该数据的部分方法。
提前致谢。
答案 0 :(得分:0)
在rails中,Action是控制器方法和页面模板
所以这里对应您的index
操作,您应该有index.html.erb
页面模板
class ProjectTasksController < ApplicationController
def index
@project_clients = ProjectTask.all
@myname='xyz'
end
end
并且在views/project_tasks/index.html.erb
中,您可以获得@project_clients
和@myname
的价值
您可以关注this以获得更清晰的信息。
答案 1 :(得分:0)
不要在partial中使用实例变量,这与控制器动作紧密耦合并且是一种不好的做法。而是将这些数据作为本地人传递。
在任何控制器中
render partial: 'your_partial', locals: { myname: @myname }
在视图中
<h1> Im partial : my name is <%= myname %></h1>
答案 2 :(得分:0)
渲染不会调用控制器的操作方法,而是直接渲染html.erb。因此,在渲染屏幕之前,您需要确保计算和初始化所有因变量。
要解决此问题,您可以使用AJAX,它在加载编辑项目屏幕时呈现项目任务列表。
public var Player : GameObject;
//call this method at desired event
function DestroyPlayer(){
Destroy(Player);
}