Simple_form错误 – ActiveRecord :: Relation:Class的未定义方法`model_name’

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

每当我使用.find(params [:id]以外的任何东西时,ActiveRecord :: Relation:Class的错误未定义方法`model_name’

我的代码如下

控制器:

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

视图:

  settings_office_path, :html => { :class => "office_form" } do |f| %> 

Edit Details

'form', :locals => { :f => f } %>

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

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

输出是Office。

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

表单要求单个记录位于@office实例变量中, where -method不会返回单个记录,而是一个关系,一旦查询就可以是多个记录。

正确的方法是:

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

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

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

我也有同样的问题,我使用.first修复它。

与此相似:

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