Ruby on rails 如何将rails中的数据从控制器传递到视图
我正在尝试从rails应用程序中的控制器将数据获取到视图中。我可以在视图中实例化模型,并且它可以工作。但当我尝试从控制器,它失败了。我似乎既找不到也弄不懂这项技术。有人能举个例子吗?该表实际上是一个视图(在SQLServer2005上),但我得到了与表相同的结果 控制器:Ruby on rails 如何将rails中的数据从控制器传递到视图,ruby-on-rails,Ruby On Rails,我正在尝试从rails应用程序中的控制器将数据获取到视图中。我可以在视图中实例化模型,并且它可以工作。但当我尝试从控制器,它失败了。我似乎既找不到也弄不懂这项技术。有人能举个例子吗?该表实际上是一个视图(在SQLServer2005上),但我得到了与表相同的结果 控制器: class ViewviewerimageController < ApplicationController def index @Viewviewerimage = Viewviewerim
class ViewviewerimageController < ApplicationController
def index
@Viewviewerimage = Viewviewerimage.last
end
end
还有
<% the = @Viewviewerimage %>[obj] = <% the %> does the same thing as [obj] = <% @Viewviewerimage %>
[obj]=做与[obj]=相同的事情
答案如下:
我省略了几行代码,其中一行是导致问题的原因。在创建实例之前,我有一个render:layout=>false。显然,这是行不通的。把它移到最后解决了这个问题。我认为你最大的问题之一是命名东西。名为ViewerImage(查看查看器图像?)的类毫无意义。还要注意正确地对文件进行大小写和命名 当我尝试运行您的示例代码时,它似乎正在运行,所以我猜您可能会遇到一些令人困惑的文件名。调试对象时,始终可以使用
.inspect
在视图中显示它们。如果将
放在与控制器对应的视图中,您应该会看到模型
在您的场景中,确保控制器进入:
app/controllers/viewerimage\u controller.rb
你有一条路线:
resources:viewerimage
我建议至少将地块重命名为
类viewerimage
,将其放入名为view\u viewer\u image.rb
的文件中,控制器也是如此。是您的视图/views/viewerimage/index
?您是否尝试过[obj]=?看看这是否有效,[obj]=
Size=
视图中的NoMethodError viewerimage#index您的视图文件名是什么,以及它在视图文件夹中的位置,即您能否回答下一步的问题?名称对您来说毫无意义,但您看到的代码不到1%,这是编码标准的结果。当您处理企业级erp应用程序时,必须遵循编码标准,请相信我。当您处理数百个对象时,并非每一个对象对您来说都“听起来不错”,但遵循标准可以节省编码时间,因此请不要担心名称。我重新命名了您建议的项目,它产生了相同的结果。我尝试了inspect,但对象为零。这可能是真的(尽管我们的RoR应用程序中有415个模型,而且我们从来没有发现有必要打破RoR命名约定,支持定制命名标准),但这似乎使得从社区获得帮助变得更加困难,因为“约定优先于配置”是社区的一个优势。这些标准是由数据库命名约定驱动的吗?这家公司已经经营多年了。该公司的业务还依赖于许多应用程序。仅仅为了根据ruby的命名约定重命名表或视图而重写多个应用程序是没有意义的。此外,我认为没有理由仅仅因为那些永远不会用它们开发应用程序的人不喜欢它就重命名它。不管我喜欢与否,这都无关紧要,我只需要让它发挥作用。
<!DOCTYPE HTML>
<html>
<head>
<title>Image Data</title>
</head>
<body>
<%= render template: "layouts/header" %>
<%= render template: "layouts/sidebar" %>
<div id="content">
Table
<% i = TblImage.first %>
[obj] = <%= i %><br>
ID = <%= i.DocumentNbr %><br>
<br>
View<br>
<% the = Viewviewerimage.first %>
[obj] = <%= the %><br>
Size = <%= the.Size %><br>
Fails (prints nothing)
[obj] = <%= @Viewviewerimage %><br>
<br>
</div>
<%= render template: "layouts/footer" %>
</body>
</html>
[obj] = #<Viewviewerimage:0x620b3f8 >
[obj] =
<% the = @Viewviewerimage %>[obj] = <% the %> does the same thing as [obj] = <% @Viewviewerimage %>