为什么simple_form会为NilClass:Class引发“未定义的方法`model_name'?”

时间:2012-12-07 21:38:22

标签: ruby-on-rails simple-form

我正在研究如何在我的用户文件夹中使用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的未定义方法`model_name':Class

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

您正在尝试为一组用户创建表单,但simple_form_for只记录一条记录,而不是数组。如果您想要的是一个表单列表,每个用户一个表单,那么这样做:

用户/ 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访问用户列表。