[英]In rails render an action method from a view of another controller
我正在嘗試實現以下目標:我有一個“項目”編輯頁面,在該頁面上顯示用於編輯項目詳細信息的字段。
在此之下,我顯示了分配給該項目的任務列表。
<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>
我得到的輸出是:{edit form fields +},下面是部分視圖后面的文本
Im partial : my name is
如“ xyz”所示,實例變量的值未打印。
經過研究,我的代碼直接渲染視圖,而無需調用action方法。 Rails不支持嗎?
我來自asp.net mvc背景,這可以在asp.net中實現,如下所示:
@{Html.RenderAction("ProjectUserList", new { projectId = Model.Id }); }
粘貼只是為了使我的觀點更加清楚,它的作用是執行方法而不是直接渲染視圖。
總結一下,我期望的是
edit.html.erb->從project_tasks控制器調用渲染動作->我在此處設置@myname->然后渲染部分視圖->視圖顯示@myname值。
我不想在項目控制器的編輯方法中設置@myname,而是在project_tasks控制器的索引方法中設置它。 這樣,我的編輯視圖或操作不知道部分視圖需要什么數據,這是部分方法負責提供該數據的責任。
提前致謝。
在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
值
您可以按照以下說明進行更清晰的說明。
不要在partial中使用實例變量,因為它會與控制器動作緊密耦合,這是一種不好的做法。 而是將這些數據作為本地數據傳遞。
在任何控制器中
render partial: 'your_partial', locals: { myname: @myname }
視野中
<h1> Im partial : my name is <%= myname %></h1>
渲染不調用控制器的操作方法,而是直接渲染html.erb。 因此,在渲染屏幕之前,您需要確保所有因變量都已計算並初始化。
為了解決這個問題,您可以利用AJAX在加載“編輯項目”屏幕時呈現項目任務列表。
#project_tasks/edit.html.erb
<h1>Editing Project</h1>
<%= render 'form', project: @project %>
<div id='project_task_listing'></div>
<%= link_to 'Show', @project %> |
<%= link_to 'Back', projects_path %>
<script>
$(function(){
$.ajax({
//make ajax request to action: 'index', controller: 'ProjectTasks' and in response update div with id 'project_task_listing'
});
});
<script>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.