将局部变量传递给控制器​​的视图

我无法出于某种原因将局部变量传递给show视图……

在我的控制器中我简单地说:

def show render template: "books/show", :resource => "Some text" end 

在我看来,我打印以下内容:

 

My local variable text:

我收到以下消息:

 undefined local variable or method `resource' for #<#:0x00000118ec3498> 

我在控制器中尝试了以下语法:

 render template: "books/show", locals: { resource: "Some text" } render template: "books/show", locals: { resource => "Some text" } render template: "books/show", :locals => { resource: "Some text" } render template: "books/show", :locals => { resource => "Some text" } 

没有运气……

有什么线索吗?

谢谢!

我认为它应该是这样的

render 'books/show', :locals => {:resource => 'Some text'}

这个对我有用

将数据从Controller传递到视图

这是一个NovelController类,放在app/ controllers/novel_controller.rb.

 class NovelController < ApplicationController def index @title = 'Shattered View: A Novel on Rails' end end 

由于这是Novel控制器和索引操作,因此相应的视图位于app/views/novel/index.html.erb

 

<%= @title %>

输出:

 Shattered View: A Novel on Rails 

运行NovelController#index后解释视图。 以下是视图可以访问和不能访问的内容:

  • 它可以访问实例变量@title ,因为它们是在NovelController NovelController#index完成运行时在NovelController对象上定义的。
  • 它可以调用实例变量@title实例方法。

首先,我想知道你为什么需要template: 。 你是Rails 2.x吗? 如果没有,则不再需要:template选项。 你应该能够与刚刚相处得很好

render "books/show"

第二,你需要指定模板吗? 你想要渲染的控制器是什么? 如果那是BooksController ,那么你也不需要模板路径,这使得线条正好

render

那还没有变量。 现在,我刚刚检查过,简单一点:

render locals: { resource: "Some text" }

以及:

render 'books/show', locals: { resource: "Some text" }

对我来说很好。 也许早期的Rails版本将“资源”视为某种关键字? 不知道,但两种forms的上述Worksforme™。

您不能将局部变量从控制器传递到视图。 您可以做的是将其定义为实例变量,然后它将自动在视图中可用。

 @resource = @book 

如果要传递完全不同的对象,则只需以不同方式定义这些实例变量。

您可以按如下方式获得它。 所有都给出相同的结果。 这是参考链接。

 render action: :show , locals: { resource: "Some text"} render :show , locals: { resource: "Some text"} render locals: { resource: "Some text"}