2011-01-04 13 views
7

मैं कहां पर पैरा पास करके मेरी संपादन कार्रवाई में कुछ और सशर्त तर्क जोड़ने की कोशिश कर रहा हूं।Simple_form त्रुटि - ActiveRecord के लिए अपरिभाषित विधि `model_name ':: संबंध: कक्षा

जब भी मैं .find के अलावा और कुछ (पैरामीटर का उपयोग करें [: ​​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 के लिए वर्ग outputted जो ActiveRecord :: संबंध है। अगर मैं सिर्फ

आउटपुट कार्यालय है।

मुझे लगता है कि यह समस्या है लेकिन इसे ठीक करने के बारे में नहीं पता। कोई विचार?

उत्तर

16

इस फॉर्म में @office इंस्टेंस वैरिएबल में एक रिकॉर्ड होने की उम्मीद है, where -method एक रिकॉर्ड नहीं लौटाता है लेकिन एक संबंध है, जो एक बार पूछताछ के बाद कई रिकॉर्ड हो सकता है।

सही तरीका है:

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

या और भी बेहतर, तुम संबंध में परिभाषित किया गया है:

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

बढ़िया है, वे काम करते हैं! दूसरा अच्छा और साफ है इसलिए मैंने इसका इस्तेमाल किया है। आपकी सहायता के लिए धन्यवाद. –

+0

किया है। चीयर्स –

+1

ग्रेट स्पष्टीकरण - आपने केवल उस कोड को प्रदान नहीं किया जिसने प्रश्न का उत्तर दिया, आपने यह भी समझाया कि यह किस तरह से काम करता है। बहुत उपयोगी! –

4

मैं भी यही मुद्दा मैं .first का उपयोग करके इसे ठीक किया गया था।

यह एक करने के लिए इसी तरह की:

def edit 
    @office = Office.where("id = ? AND company_id = ?", params[:id], @company.id).first 
end 
संबंधित मुद्दे