0

我对 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

4

1 回答 1

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 %>

因此它将链接到当前迭代的工厂。

于 2013-10-01T23:18:50.957 回答