ActionView :: Template :: Error(对于#<guestbook:0x007fd39b7f0f50>,未定义的方法`each'):

时间:2015-12-05 00:57:23

标签: ruby-on-rails ruby model-view-controller methods each

我在我的应用中遇到了上述错误,而我之前没有收到。这是日志的输出。

我的控制器看起来像;

def index
        @guestbook = Guestbook.all
    end

    def new
        @guestbook = Guestbook.new
        @guestbooks = Guestbook.all.limit(1).page(params[:page])
    end

    def create
        @guestbook = Guestbook.new(guestbook_params)

        if @guestbook.save
            flash.now[:notice] = "Thanks for taking the time to write us! We greatly appreciate it!"
            render :new
        else
            flash.now[:notice] = "Your message failed to post, please try again"
            render :new
        end
    end

    private
    def guestbook_params
        params.require(:guestbook).permit(:name, :email, :message)
    end

我的观点看起来像;

<div class="span1">
    <% @guestbook.each do |g| %>
        <br/>
        <h4><%= g.name %>, <%= g.created_at %><br/></h4>
        <%= g.message %><br/>
        <p>-----------------------------------------------------------------------------------------------------------------------</p>
    <% end %>
</div>

我的模型名为Guestbook.rb,没有关联。

我运行rails控制台来查看我的数据库,我得到了数据,因此表单提交工作正常,但是当我尝试渲染数据时,它会得到nil:class的未定义错误。

我在这里查看了其他答案,但找不到我要找的东西。

1 个答案:

答案 0 :(得分:1)

更改索引方法,使用复数作为实例变量,这将更加清晰。

def index
  @guestbooks = Guestbook.all
end

在视图中使用复数

<div class="span1">
  <% @guestbooks.each do |g| %>
    <br/>
    <h4><%= g.name %>, <%= g.created_at %><br/></h4>
    <%= g.message %><br/>
    <p>-----------------------------------------------------------------------------------------------------------------------</p>
  <% end %>
</div>

最后,由于create操作将始终显示new模板(并且因为您似乎在new模板中显示了留言簿列表),因此您应该确保构建create行动中的集合。

def create
  @guestbook = Guestbook.new(guestbook_params)
  @guestbooks = Guestbook.all.limit(1).page(params[:page])
  ...