未定义的方法 - '模型名称'

时间:2014-01-13 14:17:45

标签: ruby-on-rails

我在下面的表单上收到以下错误: Admin :: Users#index中的NoMethodError 用于ActiveRecord的未定义方法`model_name':: Relation :: ActiveRecord_Relation_User:Class

此表单位于索引页面上。我收到此错误的任何想法?

形式:

<% @user.each do |user| %>
<div class="modal-footer">                              
    <%= form_for(@user, :url => admin_user_inactive_path(user.id), html: { "role" => "form" } ) do |f| %> # Error is occurring here...
         <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
         <button type="submit" class="btn btn-primary">Inactivate User</button>
    <% end %>
</div>
<% end %>

用户控制器:

def index
   @user = User.where(del_flag: false).order('last_name DESC')
end
...
def inactive
    @user = User.find(params[:user_id])
    if @user.update_attribute(:inactive, true)
        flash[:success] = "The account (" + @user.first_name + " " + @user.last_name + ") has been inactivated."
        redirect_to action: :index
    else
        render 'edit'
    end
end

3 个答案:

答案 0 :(得分:1)

@user必须是用户的特定实例,而不是很多用户

@user = User.where(del_flag: false).order('last_name DESC')是很多用户。您可以附加.first,但我不知道这是否是您想要做的

答案 1 :(得分:0)

我有两个问题首先你正在使用form_for(@user)这是一个数组而不是对象。第二个admin_user_inactive_path(user.id)应使用@user.first.id,因为user不是必需的。所以使用form_for(@ user.first)

答案 2 :(得分:0)

您应该将表单设置为使用包含单个user对象的本地变量User,而不是包含@user的实例ActiveRecord::Relation

<%= form_for(user, :url => admin_user_inactive_path(user.id), html: { "role" => "form" } ) do |f| %>

我还建议您将@user实例变量重命名为@users,因为单数形式表明变量包含单个ActiveRecord对象。