ActionView::Template::Error(#<Guestbook:0x007fd39b7f0f50> 的未定义方法“each”):

ActionView::Template::Error (undefined method `each' for #<Guestbook:0x007fd39b7f0f50>):

我在我的应用程序中遇到了以前没有遇到的上述错误。那是日志的输出。

我的控制器看起来像;

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.

我查看了此处的其他答案,但找不到我要找的内容。

将您的索引方法更改为对实例变量使用复数形式,这样会更清楚。

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])
  ...