2

我正在研究如何在我的用户文件夹中的 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'

有任何想法吗?

4

1 回答 1

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

于 2012-12-07T22:03:54.927 回答