Ruby on rails 为什么RubyonRails总是告诉我一个未实例化的变量?

Ruby on rails 为什么RubyonRails总是告诉我一个未实例化的变量?,ruby-on-rails,ruby,nomethoderror,Ruby On Rails,Ruby,Nomethoderror,编辑:已解决,在Brian Kunzig的答案+评论中查看解决方案 我决定尝试RubyonRails,并且一直遇到这个问题。我一直在寻找这样的问题,但没有一个解决方案能帮我解决。似乎我经常写一些不正确的代码。下面是一些代码片段: (忽略代码的用途,只是尝试一下) 我的控制器: class AuthsController < ApplicationController def index @auths=Auth.all end

编辑:已解决,在Brian Kunzig的答案+评论中查看解决方案

我决定尝试RubyonRails,并且一直遇到这个问题。我一直在寻找这样的问题,但没有一个解决方案能帮我解决。似乎我经常写一些不正确的代码。下面是一些代码片段:

(忽略代码的用途,只是尝试一下)

我的控制器:

class AuthsController < ApplicationController

        def index
          @auths=Auth.all  
        end

        def new
          @auth=Auth.new
        end

        def show
          @auth=Auth.find(params[:id])
        end
end
class AuthsController
My index.html.erb:

<div style="margin: 0 auto; width:50%; text-align: center">
    <h1>Please authorise your use of this webpage and its database(s).</h1>
    <%= form_for :auth, url: auths_path do |f| %>

    <% if @auth.errors.any? %> ==> RAILS REPORTS ERROR IN CODE HERE
    <div id="error_explanation">
      <h2>
        <%= pluralize(@auth.errors.count, "error") %> prohibited
        this authentification from being saved:
      </h2>
      <ul>
        <% @auth.errors.full_messages.each do |msg| %>
          <li><%= msg %></li>
        <% end %>
      </ul>
    </div>
  <% end %>

  <p>
    <%= f.label :username %><br>
    <%= f.text_field :username %>
  </p>

  <p>
    <%= f.label :password %><br>
    <%= f.text_field :password %>
  </p>

  <p>
    <%= f.submit %>
  </p>

<% end %>

</div>

请授权您使用此网页及其数据库。
==>RAILS在此报告代码错误
禁止
无法保存此身份验证:


所以,底线是。例如,Rails说我不能将@auth以_的形式用于block。或者其他任何地方。。它总是说它属于尼勒阶级之类的东西。它显然想让我以某种方式实例化它,但这难道不足以使该方法成为新的并放在以下行:@auth=auth.new吗

我只是对这种情况感到困惑,因为我不知道该怎么办。非常感谢


另外,我使用
是因为它不接受@auth,这就是下一行的错误所在。我已经看到了在控制器之外“在运行中”实例化它的解决方案,但我希望按照预期的方式进行实例化。

您应该将此表单放在
new.html.erb
文件中,而不是
索引中。
索引
用于列出条目,而
新建
创建
操作处理
发布
请求。出现错误是因为您试图列出所有身份验证,但尚未创建任何身份验证。此外,如果您使用标准rails路由,那么您将通过
GET
请求发送表单。使用足智多谋的路由,并将此表单放入该控制器的
新视图中,它应该可以工作

路由文件应为:

resources :auths

这将自动提供所有必要的路由。如果在修改后键入
rake routes
,您将看到新生成的URL及其帮助程序。您会注意到,它提供了
create
update
操作一个
POST
/
PUT
请求,而其他人是
GET
您应该将此表单放入
new.html.erb
文件中,而不是
索引中。
索引
用于列出条目,而
新建
创建
操作处理
发布
请求。出现错误是因为您试图列出所有身份验证,但尚未创建任何身份验证。此外,如果您使用标准rails路由,那么您将通过
GET
请求发送表单。使用足智多谋的路由,并将此表单放入该控制器的
新视图中,它应该可以工作

路由文件应为:

resources :auths

这将自动提供所有必要的路由。如果在修改后键入
rake routes
,您将看到新生成的URL及其帮助程序。您会注意到,它提供了
create
update
操作一个
POST
/
PUT
请求,而其他人则是
GET

您的
索引
控制器处理程序仅声明
@auths
。你到底为什么希望定义
@auth
?你不应该在index.html.erb文件中有表单内容。请将表单代码放入new.html.erb文件中。索引用于显示身份验证对象的列表。它已解决。感谢您的回复。您的
索引
控制器处理程序仅声明
@auths
。你到底为什么希望定义
@auth
?你不应该在index.html.erb文件中有表单内容。请将表单代码放入new.html.erb文件中。索引用于显示身份验证对象的列表。它已解决。谢谢你的回复。谢谢你的回复。我做了一些项目,将表单放在new.html.erb中,它运行正常。这是否意味着由于路由,表单必须在“新”模板中?我特别希望它在第一个打开的东西上出现,这就是为什么它在那里。编辑:已将resources:auths添加到路由中file@lmatejic不一定,但由于您仅在actions
new
show
中定义了
@auth
,因此这些是您可以在中使用它的唯一视图。有时甚至可以将表单放入部分(
\u表单
),并将其包含在定义了
@auth
的页面上(
新建
编辑
),我知道如何创建视图和其他方法,那么如何使表单成为在欢迎页面之后打开的第一件事呢?页面上写着欢迎!下面有一个“继续”按钮,它会将您带到一个功能窗体,而不显示以前输入的所有数据。如果您使用的是Rails标准资源路由,那么是的,它必须进入新操作。如果您在控制台中键入“rake routes”,它将显示该资源生成的路由及其请求类型。索引操作预定义为通过“获取”请求提交您的页面,这意味着如果您希望通过表单提交数据,则需要将其更改为POST请求。从主页创建指向该身份验证控制器的新操作的链接。在你的hompe页面视图中这样做:它将把他们带到正确的页面。谢谢你的回复。