2011-01-04 16 views
7

私は、いくつかの条件付きロジックを編集アクションに追加しようとしています。Simple_formエラー - ActiveRecord :: Relationのための未定義のメソッド `model_name ':クラス

私は.find(のparams以外を使用するたびに[:ID]、ActiveRecordのためのエラー未定義のメソッド `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です。

私はこれが問題だと思いますが、それを修正する方法はわかりません。何か案は?

答えて

16

フォームでは、@officeインスタンス変数に1つのレコードがあると想定していますが、where -methodは1つのレコードではなく、照会された複数のレコードであるリレーションを返します。

正しい方法は次のとおりです。

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

またはより良い、あなたが関係を定義した場合:

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

グレート、彼らが仕事します!私はそれを使用したので、2番目のものは素晴らしく清潔です。ご協力いただきありがとうございます。 –

+0

が完了しました。 Cheers –

+1

大きな説明 - あなたは質問に答えたコードを提供しただけではありませんでした。非常に役立ちます! –

4

はまた、私は.firstを使って、それを修正し、同じ問題がありました。

この1と同様に

def edit 
    @office = Office.where("id = ? AND company_id = ?", params[:id], @company.id).first 
end 
関連する問題