2010-12-27 26 views
5

मेरे पास यह अस्पष्ट ActiveRecord :: संबंध, अपरिभाषित विधि त्रुटि है। मुझे नहीं पता क्यों, क्योंकि मेरे मॉडल एसोसिएशन अच्छी तरह से परिभाषित हैं और घटना तालिका में उपयोगकर्ता तालिका के लिए विदेशी कुंजी है। मैं इसे ठीक उपयोग करने की कोशिश, लेकिन यह विफल रहा है: Rails 3 ActiveRecord::Relation random associations behaviorरेल 3.0.3 - ActiveRecord :: रिलेशनशिप, अपरिभाषित विधि त्रुटि

event.rb

class Event < ActiveRecord::Base 
    belongs_to :user 

    attr_accessible :event_name, :Starts_at, :finish, :tracks 
end 

user.rb

class User < ActiveRecord::Base 
    has_many :events, :dependent => :destroy 

    attr_accessible :name, :event_attributes 

    accepts_nested_attributes_for :events, :allow_destroy => true 

end 

schema.rb

ActiveRecord::Schema.define(:version => 20101201180355) do 

    create_table "events", :force => true do |t| 

    t.string "event_name" 
    t.string "tracks" 
    t.datetime "starts_at" 
    t.datetime "finish" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.integer "user_id" 
    end 
end 

त्रुटि संदेश

NoMethodError in Users#index 
undefined method `events' for #<ActiveRecord::Relation:0x4177518> 

Extracted source (around line #10): 

7: <th><%= sortable "Tracks" %></th> 

8: </tr> 


10: <% @users.events.each do |event| %> 

11: <% debugger %> 

12: <tr> 

13:  <td><%= event.starts_at %></td> 

Trace of template inclusion: app/views/users/index.html.erb 

Rails.root: C:/rails_project1/events_manager 
Application Trace | Framework Trace | Full Trace 

app/views/users/_event_user.html.erb:10:in `_app_views_users__event_user_html_erb__412443848_34308540_1390678' 
app/views/users/index.html.erb:7:in `_app_views_users_index_html_erb___603337143_34316016_0' 
+0

@matchu, इसे संपादित करने और इसे स्पष्ट करने के लिए धन्यवाद। – brg

उत्तर

5

एकuser में कई events हैं। आपके कोड में, ऐसा लगता है कि आप events पर @users पर पहुंचने का प्रयास कर रहे हैं, जो संभवतः एक उपयोगकर्ता से अधिक होगा।

@users.each do |user| 
    user.events.each do |event| 
    ... 
    end 
end 

या:

@user.map(&:events).flatten.each do |event| 
    ... 
end 

साथ ही, आप कोई गुण है कि अपने डेटाबेस में स्तंभ हैं पर attr_accessible निर्दिष्ट करने की आवश्यकता नहीं है

आप शायद कुछ ऐसा करना चाहते हैं।

+0

आपको बहुत धन्यवाद, मैं पहले विकल्प के साथ गया और यह मेरे लिए तय किया गया। – brg

8

यदि आप त्रुटि संदेश को बारीकी से पढ़ते हैं, तो यह नहीं कहता कि समस्या घटनाओं के साथ संबंध है। इसे कहते हैं:

अपरिभाषित विधि `के लिए

10 घटनाओं ': <% @ users.events.each करना | घटना | %>

मैं भी मुसीबत यह समझने जब मैं पहली बार यह

टकरा था इसका मतलब है कि @users के खोजक उपयोगकर्ता सूची के बजाय एक रिलेशन वस्तु (या अच्छी तरह से नाम नहीं वस्तु लौटा रहा है) आप की उम्मीद है।

यदि आप कहीं भी ढूंढ रहे हैं, तो आपको इसे "जहां (: id => ...) के लिए बदलना चाहिए।

@users = User.where(<conditions go here>).all 

या आप के बाद जिसके परिणामस्वरूप संबंध वस्तु इस्तेमाल कर सकते हैं:

@users = User.find(<conditions go here>) 

यह करने के लिए बदला जाना चाहिए: पहले "

उदाहरण के लिए, आप शायद कुछ है कि आपके नियंत्रक में इस तरह दिखता है अतिरिक्त स्थितियों और एसक्यूएल "कॉन्फ़िगरेशन" के लिए "कहां"

@users = User.where(:admin => true).where('created_at > ?', min_date).order('created_at').limit(10).all 

ए आर elation ऑब्जेक्ट केवल तभी निष्पादित करेगा जब ".first" ".all" ".each" या ".inspect" इस पर लागू होता है।

संबंधित मुद्दे