Рельсы 3.0.3 - ActiveRecord::Relation, неопределенная ошибка метода
Я имею эту необъяснимую ActiveRecord::Relation, неопределенную ошибку метода. Я не знаю почему, так как моя ассоциация модели четко определена, а таблица событий имеет внешние ключи для пользовательской таблицы. Я пытался использовать это исправление, но оно не удалось: Rails 3 ActiveRecord:: Relation случайные ассоциации поведения
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'
2 ответа
Один 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
на любые атрибуты, которые являются столбцами в вашей базе данных.
Если вы внимательно прочитаете сообщение об ошибке, это не говорит о том, что проблема в связи с событиями. Это говорит:
неопределенный метод `events'для
10: <% @ users.events.each do | event | %>
У меня также были проблемы с пониманием этого, когда я впервые столкнулся с этим
Это означает, что искатель @users возвращает объект Relation вместо списка пользователей (или объекта с неправильным именем), который вы ожидали.
Если вы где-то используете поиск, вы должны изменить его на "где (:id => ...). First"
Например, у вас, вероятно, есть что-то похожее на ваш контроллер:
@users = User.find(<conditions go here>)
Это должно быть изменено на:
@users = User.where(<conditions go here>).all
Или вы можете использовать результирующий объект отношения после "где" для дополнительных условий и "конфигурации" SQL
@users = User.where(:admin => true).where('created_at > ?', min_date).order('created_at').limit(10).all
Объект отношения будет выполнять запрос только тогда, когда к нему вызывается ".first" ".all" ".each" или ".inspect".