如何在新操作中定义Model.all实例变量。

时间:2013-06-07 20:44:31

标签: ruby-on-rails

我有一个RESTful应用程序,我在其中创建电影摘要。

在我的新页面上,我希望能够看到我已创建的电影的标题。

在我的控制器中,我在新操作中定义了@movies@movie

  def new
    @movies = Movie.all
    @movie = Movie.new
  end

在我的新视图中,我在表单

上面包含了@movies的数据
<% @movies.each do |movie| %>
  <tr>
    <td><%= movie.name %></td>
    <td><%= movie.info %></td>
  </tr>
<% end %>
#My form starts here, under the table of movie info

当我第一次进入新动作时,这是有效的。但是,当我从失败的create重定向到此处时,我会获得@ {{1}的nil

为什么会这样,我如何定义@movies以便它可以用于重定向的失败创作呢?

1 个答案:

答案 0 :(得分:2)

如果create操作失败,您通常不应使用redirect_to将浏览器指向new操作。相反,如果保存失败,您应该只是调用render :new

当您render另一个操作视图时,您需要确保为该视图提供所需的变量(在您的情况下为@movies@movie。 <{1}}动作本身在调用new时未执行。

解决此问题的一种方法是将render :new分配移至@movies。这样,它将在before_filter:new操作之前分配,保证在您呈现:create操作视图时它的可用性。

:new