繁体   English   中英

Simple_form错误-ActiveRecord :: Relation:Class的未定义方法“ model_name”

[英]Simple_form Error - undefined method `model_name' for ActiveRecord::Relation:Class

我试图通过将参数传递到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。

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

该表单期望一条记录位于@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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM