2010-12-27 24 views
5

Tôi đang gặp sự cố này ActiveRecord không rõ nguyên nhân :: Quan hệ, lỗi phương thức không xác định. Tôi không biết tại sao, kể từ khi hiệp hội mô hình của tôi được xác định rõ và bảng sự kiện có các khóa ngoại cho bảng người dùng. Tôi đã cố gắng sử dụng sửa chữa điều này, nhưng nó thất bại: Rails 3 ActiveRecord::Relation random associations behaviorđường ray 3.0.3 - ActiveRecord :: Quan hệ, lỗi phương thức không xác định

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 

thông báo lỗi

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, cảm ơn bạn đã chỉnh sửa và làm cho nó rõ ràng hơn. – brg

Trả lời

5

Mộtuser có nhiều events. Trong mã của bạn, có vẻ như bạn đang cố gắng truy cập events trên @users, có lẽ sẽ là nhiều hơn một người dùng.

Bạn có thể muốn làm điều gì đó như:

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

hay:

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

Ngoài ra, bạn không cần phải xác định attr_accessible trên bất kỳ thuộc tính là các cột trong cơ sở dữ liệu của bạn.

+0

cảm ơn bạn rất nhiều, tôi đã đi với tùy chọn đầu tiên và sửa nó cho tôi. – brg

8

Nếu bạn đọc thông báo lỗi chặt chẽ, nó không nói vấn đề là mối quan hệ với các sự kiện. Nó nói:

không xác định phương pháp 'sự kiện cho

10: <% @ users.events.each làm | sự kiện | %>

Tôi cũng gặp khó khăn tìm hiểu điều này khi tôi lần đầu tiên đụng vào nó

Điều này có nghĩa rằng các công cụ tìm của @users được trả lại một đối tượng Relation thay vì danh sách người dùng (hoặc đối tượng không được đặt tên) Bạn mong đợi.

Nếu bạn đang sử dụng tìm kiếm ở bất cứ nơi nào, bạn nên thay đổi nó thành "where (: id => ...).đầu tiên"

Ví dụ, bạn có thể có cái gì đó trông như thế này trong điều khiển của bạn:

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

này nên được đổi thành:

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

Hoặc bạn có thể sử dụng kết quả đối tượng liên quan sau "vị trí" cho các điều kiện bổ sung và cấu hình sql "

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

A r đối tượng elation sẽ thực thi truy vấn chỉ khi một ".first" ".all" ".each" hoặc ".inspect" được gọi trên nó.

Các vấn đề liên quan