我在我的应用中遇到了上述错误,而我之前没有收到。这是日志的输出。
我的控制器看起来像;
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的未定义错误。
我在这里查看了其他答案,但找不到我要找的东西。
答案 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])
...