gpt4 book ai didi

ruby-on-rails - NilClass :Class 的 Rails 未定义方法 `model_name'

转载 作者:数据小太阳 更新时间:2023-10-29 07:08:43 26 4
gpt4 key购买 nike

我有一个表单,我想出现在每个页面的顶部,所以我将它包含在/app/views/layouts/application.html.erb 文件中,但我收到错误 undefined methodmodel_name' for NilClass:Class` 尝试加载页面时。

这是 application.html.erb 中的表单片段

 <%= form_for @user do |f| %>
<h3>Add new contact</h3>
<%= f.text_field :first_name %><br />
<%= f.text_field :last_name %>
<%= f.text_field :email %>
<hr />
<%= f.submit "Add Contact" %>
<% end %>

这是我的/app/controllers/user_controller.rb

class UserController < ApplicationController

def index

end

def new
@user = User.new
end

end

我认为我遇到了这个错误,因为表单位于 application.html.erb 文件中,我需要以某种方式指定路径,但话又说回来,我对 Rails 还是很陌生。

如果您需要发布任何其他内容,请告诉我。

编辑按照 Ola 的建议,在我的 app/views/layouts/application.html.erb 文件中,我有这样的内容:

<div>
<%= yield :add_user %>
</div>

在我的 app/views/users/new.html.erb 文件中有这个

<% content_for :add_user do %>
<%= form_for @user do |f| %>
<h3>Add new contact</h3>
First Name<br />
<%= f.text_field :first_name %><br />
Last Name<br />
<%= f.text_field :last_name %><br />
Email<br />
<%= f.text_field :email %>
<hr />
<%= f.submit "Add Contact" %>
<% end %>
<% end %>

表单没有呈现,因为我的 url 是 http://localhost:3000/admin/index 所以它在 app/views/中寻找 add_user content_for admin/index.html.erb

最佳答案

如果表单包含多个操作(页面),您需要将 @user 设置为某些内容,否则 form_for 指令将失败(它不会为 创建表单)。

更好的方法(也是 Rails 的默认方法)是为每个操作创建单独的 View ,每个 View 仅包含该操作所需的元素,并使用 application.html.erb 加载到您的 <%= yield %> 布局中。所以你会有一个 app/views/users/new.html.erb View ,其中包含表单。您 never 很少需要在 Rails 中定义任何加载路径,它们都是从模型、 Controller 和操作名称派生的 - 或者从您的 routes.rb 派生。这是 convention over configuration 范式的核心部分,它在 Rails 中运行得如此之深。

编辑:如果您确实需要在每个页面上创建一个新对象的表单(例如通常用于 UserSessions),您可以重写您的 form_for 这样它不依赖于存在的对象:

form_for(User.new)

或者如果你需要强制它发布到 create 方法

form_for(User.new, :url => { :action => "create" }) 

您可以在 Ruby On Rails API docs. 中阅读有关资源驱动 form_for 的更多信息

关于ruby-on-rails - NilClass :Class 的 Rails 未定义方法 `model_name',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11093848/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com