Ruby 从控制器向视图传递局部变量

Ruby 从控制器向视图传递局部变量,ruby,ruby-on-rails-3,ruby-on-rails-4,view,controller,Ruby,Ruby On Rails 3,Ruby On Rails 4,View,Controller,由于某种原因,我无法将局部变量传递到show view 在我的控制器中,我只是: def show render template: "books/show", :resource => "Some text" end 在我看来,我打印了以下内容: <h1>My local variable text: <%= resource %></h1> 没有任何运气 有什么线索吗 谢谢 无法将局部变量从控制器传递到视图。您可以将它定义为一个实例变量,然后

由于某种原因,我无法将局部变量传递到show view

在我的控制器中,我只是:

def show
  render template: "books/show", :resource => "Some text"
end
在我看来,我打印了以下内容:

<h1>My local variable text: <%= resource %></h1>
没有任何运气

有什么线索吗


谢谢

无法将局部变量从控制器传递到视图。您可以将它定义为一个实例变量,然后它将在视图中自动可用

@resource = @book

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

我认为应该是这样的

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

它适用于我

将数据从控制器传递到视图 这里有一个NovelController类,将放入
app/controllers/novel\u controller.rb.

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

Shattered View: A Novel on Rails
运行
NovelController#index
后将解释该视图。以下是视图可以访问和不能访问的内容:

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

首先,我想知道为什么您需要
模板:
。你在Rails 2.x上吗?如果没有,则不再需要
:template
选项。你应该能和公正的人相处得很好

render“books/show”

第二,您需要指定模板吗?要从哪个控制器渲染?如果是
BooksController
,那么您也不需要模板路径,这使得该行

渲染

这还没有变量。现在,我刚刚检查了一下,一个简单的:

呈现局部变量:{resource:“一些文本”}

以及:

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


对我来说很好。也许早期的Rails版本将“资源”视为某种关键字?不知道,但是上面的工作表™ 两种形式都有。

您可以按如下方式获得它。所有的结果都是一样的。这里是链接


为什么需要传递局部变量而不是实例变量?我假设“sometext”是一个占位符,因为如果不是这样的话,它在视图中会更有意义。我将局部变量传递给分部,但将实例变量传递给基本视图。当地人暗示它只在当地需要,之后可以清理。否则这是我的2秒不,比这更复杂!“一些文字”只是为了说明。。。根据调用模板的位置,传递不同的对象。为此,我别无选择,只能添加为视图定义局部变量的功能……例如,我从控制器或装饰器调用模板。此外,该模板用于不同的类,因为它们在许多方面非常相似……我建议不要问这样一个广泛的问题,然后指定总体问题是什么,这样人们可以帮助解决这个问题,并提供设计建议。如果我必须分享视图方面,我通常会将它们分解成部分,并传递一个更通用的命名对象来处理相似性,但这只是我自己。实际上,我会发布实际问题,人们会更愿意提供帮助。实际上,您肯定可以将局部变量从控制器传递到视图。定义实例变量是一种常见的方法,但不是唯一的方法。@silverdr我很想看到这方面的演示。当然可以。下面我的答案deeeep down中有一个工作示例:-)除此之外,甚至所谓的“Rails最佳实践”也抱怨在视图中使用实例变量而不是局部变量。实际上我并不同意这一点,我相信实例变量在视图中有其有效的位置,但是如果有人想遵守他们的建议,那么传递局部变量肯定是可能的。
class NovelController < ApplicationController
      def index
        @title = 'Shattered View: A Novel on Rails'
      end
end
<h1><%= @title %></h1>
Shattered View: A Novel on Rails
render action: :show , locals: { resource: "Some text"}
render :show , locals: { resource: "Some text"}
render locals: { resource: "Some text"}