Simple_form错误 - ActiveRecord :: Relation:Class的未定义方法`model_name'

时间:2011-01-04 21:57:54

标签: ruby-on-rails forms

我试图通过将params传递到where来为我的编辑操作添加一些条件逻辑。

每当我使用.find(params [:id]以外的任何东西时,ActiveRecord :: Relation:Class

的错误未定义方法`model_name'

我的代码在

下面

控制器:

def edit
   @office = Office.where("id = ? AND company_id = ?", params[:id], @company.id )
end

查看:

<%= simple_form_for @office, :url => settings_office_path, :html => { :class => "office_form" } do |f| %>
  <h1>Edit <%= @office.office_name %> Details</h1>
  <%= render :partial => 'form', :locals => { :f => f } %>
<% end %>

我输出了@office的类,它是ActiveRecord :: Relation。如果我只是使用

@office = Office.find(params[:id])

输出是Office。

我认为这是问题,但不知道如何解决它。有什么想法吗?

2 个答案:

答案 0 :(得分:16)

表单要求单个记录在@office实例变量中,where - 方法不会返回单个记录,而是一个关系,一旦查询就可以是多个记录。 / p>

正确的方法是:

@office = Office.where(:company_id => @company.id).find(params[:id])

或者甚至更好,如果您已经定义了关系:

@office = @company.offices.find(params[:id])

答案 1 :(得分:4)

我也遇到过使用.first修复它的问题。

与此类似:

def edit
   @office = Office.where("id = ? AND company_id = ?", params[:id], @company.id ).first
end