我是Rails的新手,并创建了第二个控制器来显示项目列表,而不提供编辑和销毁选项。 (它的意思是前端)我现在正在尝试为该特定列表创建一个显示视图,但我不确定采取了哪些步骤。创建了第二个视图文件后,我似乎无法访问模型中的信息,接收到未定义的变量错误。我能够在控制器的主索引视图中访问它们,所以我希望路由中的某些东西或者我必须添加的控制器本身。
提前感谢您的帮助。
2013年10月1日更新16:15PST
第二个名为show.html.erb的视图,只包含以下代码以查看它是否会提取数据:
<p><%= plant.botanical_name %></p>
第一个名为index.html.erb的视图包含此视图,它正确地提取变量:
<h1>Plant Display</h1>
<% @plants.each do |plant| %>
<div class="listingItem">
<div class="showThumbnail">
<%= link_to display_show_path do %>
<%= image_tag plant.photo.url(:medium) %>
<% end %>
</div>
<div class="listingItemInformation">
<p><%= plant.botanical_name %></p>
<p><%= plant.family %></p>
<p><%= plant.common_name %></p>
</div>
</div>
<div class="clear">
</div>
<% end %>
控制器就是这样:
class DisplayController < ApplicationController
def index
@plants = Plant.order(:botanical_name)
end
end
此外,就版本而言:Rails 4.0.0.rc1和Ruby 1.9.3p392
答案 0 :(得分:0)
plant
视图中的index
变量实际上是迭代块的参数。当你这样写:
它遍历@plants
中的所有植物,并在每次迭代plant
上分配给植物。 @plants
本身在index
控制器方法中定义。
您的show
视图不起作用,因为它使用plant
但未在任何地方定义。由于您只想显示单个工厂,因此您要做的是在@plant
控制器方法中创建show
变量,并在代码中使用它而不是plant
。所以你的控制器应该看起来像这样(没有测试它):
class DisplayController < ApplicationController
def index
@plants = Plant.order(:botanical_name)
end
def show
@plant = Plant.find(params[:id])
end
end
和您的观点:
<p><%= @plant.botanical_name %></p>
此外,在index
视图中,您需要更改
<%= link_to display_show_path do %>
到
<%= link_to display_show_path(plant) do %>
因此它将链接到当前迭代的工厂。