为什么simple_form提高"undefined method `model_name' for NilClass:Class"?



我正在研究如何从我的用户文件夹中使用位于index.html.erb的simple_form gem。我没有成功。奇怪的是,它在_form.html.erb上工作。为什么?

users_controller.rb
def index
@users = User.find_by_sql(["SELECT id, name, login, password
FROM users"])
end
users/index.html.erb
<%= simple_form_for @users do |f| %>
<p>
<%= f.input :name %>
</p>
.
.
.
<p>
<%= f.button :submit %>
</p>
<% end %

它引发了此异常:NilClass:Class 的未定义方法"model_name">

有什么想法吗?

您正试图为用户数组创建一个表单,但simple_form_for只接受一条记录,而不是一个数组。如果你想要的是一个表单列表,每个用户一个,那么这就可以做到:

users/index.html.erb

<% @users.each do |user| %>
<%= simple_form_for user do |f| %>
<p>
<%= f.input :name %>
</p>
<p>
<%= f.button :submit %>
</p>
<% end %>
<% end %>

但这似乎是一件奇怪的事情,这个表单不应该在你的new页面上,而不是索引页面上吗?

或者,如果您想在索引页面上为用户创建一个表单,并附上用户列表,则需要在index操作中创建该用户:

def index
@users = User.find_by_sql(["SELECT id, name, login, password
FROM users"])
@user = User.new
end

然后,您可以在视图中使用simple_form_for @user do |f| ...创建表单,也可以使用@users访问用户列表。

相关内容