首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NoMethodError in Pages#home

NoMethodError in Pages#home
EN

Stack Overflow用户
提问于 2010-10-15 06:52:05
回答 3查看 6K关注 0票数 4

我正在为rails 3编写一本railtutorial.org在线书,我已经完成了第11章的大部分内容,在其中我们添加了提交微信的能力。添加适当的代码后,我无法呈现页面。以下是返回的错误:

NoMethodError in Pages#home

显示c:/rails_projects/sample_app/app/views/shared/_error_messages.html.erb所在的>#1行:

当你没有预料到的时候,你就有了一个零目标!您可能会期望ActiveRecord::Base的实例。在计算nil.errors提取的源时(围绕第1行)时发生了错误:

1:<% if @user.errors.any? %>

2:<div id="error_explanation">

3:<h2><%= pluralize(@user.errors.count, "error") %>

4:prohibited this <%= object.class.to_s.underscore.humanize.downcase %>

模板包含的跟踪:app/view/shared/_micropost_form.html.erb,>app/view/pages/ome.html.erb

如果我从app\views\shared_micropost_form.html.erb <%=呈现'shared/error_messages‘:object => f.object %>中删除以下行,则页面将正确呈现

任何帮助都是非常感谢的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-15 07:10:57

这是因为您正在将一个变量object传递到您的分部,但是在这个部分中,您尝试使用一个名为@user的变量。将该部分中的@user的每个实例更改为object,它将很好地工作。

代码语言:javascript
运行
复制
1:<% if object.errors.any? %>
2:<div id="error_explanation">
3:<h2><%= pluralize(object.errors.count, "error") %>
4:prohibited this <%= object.class.to_s.underscore.humanize.downcase %>

更新:只是为了澄清一下,上面的答案是假设设置@user变量有问题,但没关系。当您在呈现调用中说:object => f.object时,您告诉render接受此表单所基于的对象,并将其发送到具有变量名称object的部分。

将错误代码重构为共享部分的全部要点是,它将被多个表单使用,用于不同的模型。在这个部分中,您不能说是@user,因为您将在所有其他模型中使用相同的部分。这就是为什么将部分中的代码更改为使用更通用的变量名object的原因。

票数 9
EN

Stack Overflow用户

发布于 2010-10-15 07:04:07

这告诉您@user对象是零。您应该确保在控制器pages#home中实际为@user设置一个值。如果您在回收表单帖子上的错误后重定向到主页,那么在重定向之后,您将不再拥有instances变量@user。如果希望在表单post错误消息中包含原始post值以呈现视图,则最常见的做法是:

代码语言:javascript
运行
复制
# Some controller
def create
  begin
    @user = User.create(params[:user])
  rescue ActiveRecord::RecordInvalid => e
    @errors => e.record.full_error_messages
    render :action => "new"
  end
end

我不知道教程会让您做什么,但是如果您在pages_controller#home中发布了代码,那么我们可以告诉您更多。

票数 0
EN

Stack Overflow用户

发布于 2010-10-15 08:08:02

似乎在您正在访问的控制器操作中没有@user变量

我会试着

代码语言:javascript
运行
复制
<% if @user && @user.errors.any? %>

如果有@user,那么它将检查@user.errors.any

另外,如果你用的是设计,你可以试试

代码语言:javascript
运行
复制
<% user_signed_in? && @user.errors.any? %>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3940087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档