编辑:已解决,在Brian Kunzig的回答+评论中查看解决方案。
我决定试用Ruby on Rails并且一直在遇到这个问题。我一直在寻找这样的问题,但没有一个解决方案能为我做到这一点。似乎我不断写出一些不正确的代码。所以这里有一些代码片段:
(忽略代码的用途,只是为了尝试填充)
我的控制器:
class AuthsController < ApplicationController
def index
@auths=Auth.all
end
def new
@auth=Auth.new
end
def show
@auth=Auth.find(params[:id])
end
end
我的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说我不能在form_for块中使用@auth。或者其他任何地方。它总是说它属于NilClass或类似的东西。它显然希望我以某种方式实例化它,但是不足以使方法成为新的并且放在行中:@ auth = Auth.new?
我只是对这种情况感到困惑,因为我无法弄清楚它应该怎么做。非常感谢!
P.S。我使用<%= form_for :auth, url: auths_path do |f| %>
是因为它不接受@auth,这就是下一行中的错误。我已经看到了实例化它的解决方案&#34;在旅途中&#34;在控制器之外但我想以它应该完成的方式去做。
答案 0 :(得分:0)
您应该将此表单放在new.html.erb
文件中,而不是index
。 index
用于在new
和create
操作处理POST
请求时列出条目。您收到错误的原因是,当您没有创建任何Auth时,您会尝试列出所有Auth。此外,如果您正在使用标准的铁路路由,则可以通过GET
请求发送表单。使用资源丰富的路由并将此表单放在该控制器的new
视图中,它应该可以正常工作。
路由文件应为:
resources :auths
这将自动提供所有必要的路由。如果在修改此内容后键入rake routes
,您将看到新生成的URL及其帮助程序。您会注意到,create
和update
操作为POST
/ PUT
提供了GET
/ VerticalAlignment
请求,而其他操作则为Top
。