Ruby - 是否可以在同一个“视图”文件中创建两个不同的循环?

时间:2015-07-10 10:29:58

标签: ruby-on-rails ruby view

我目前正在学习Ruby on Rails,感谢一个名为codecademy的网站,我正在学习如何从存储到变量中的数据库数组中显示信息

exercice的更正如下所示:

<div class="main movie-show">
  <div class="container">
    <div class="movie">

      <!-- Display the movie info here -->
      <div class="info">
        <%= image_tag @movie.image %>
        <h3 class="movie-title"><%= @movie.title %></h3>
        <p class="movie-release-year"><%= @movie.release_year %></p>
        <p class="movie-plot"><%= @movie.plot %></p>
      </div>
    </div>

    <h2>Cast</h2>
    <% @actors.each do |actor| %>
      <div class="actor">
        <%= image_tag actor.image %>
        <h3 class="actor-name"><%= actor.first_name %> <%= actor.last_name %></h3>
        <p class="actor-bio"><%= actor.bio %></p>
      </div>
    <% end %>
  </div>
</div>

你可以在“电影”部分看到他们直接拿变量来显示所需的信息,而他们将所有“演员”的部分存放在另一个|演员|变量

我的问题如下,因为我没有在网上找到任何令人满意的答案,是否可以在同一个文件中以相同的方式使用两个变量?喜欢使用

<% @movies.each do |m| %>

<% @actors.each do |a| %>

无论如何都会有效吗?会有错误吗?

1 个答案:

答案 0 :(得分:2)

您可以在视图中使用任意数量的实例变量,前提是它们已在控制器代码中正确定义。

如果您在控制器操作中定义了@actors@movies个实例变量,那么您可以在相应的视图中访问它们。记住:我写了,相应的观点。

还有其他方式。例如,如果您已经定义了Movie模型与Actor模型之间的关系,并且关系表明电影可以包含许多演员。在这种情况下,您只需要在控制器中实例化@movies,然后就可以通过以下方式访问actor:

<% @movies.each do |movie| %>
   <% movie.actors.each do |actor| %>
     <%# All other relevant code %>
   <% end %>
<% end %>

如果您不了解关系,可以通过以下方式定义它们:

class Movie < ActiveRecord::Base
  has_many :actors
end

class Actor < ActiveRecord::Base
  belongs_to :movie
  # actors table should have a column named 'movie_id' for this to work
end