2016-03-12 60 views
-1

我想开发一个应用程序的时间表。 每个用户创建自己的日程安排。Rails4:UsersController#show中的NoMethodError,未定义的方法

我想显示以下数据;

schedule title (user name) 

    day1(mm/dd,yyyy) 
    09:00 Math 
    11:00 Science 
    Room name A 

    day2(mm/dd,yyyy) 
    10:00 Physics 
    13:00 Music 
    Room name B 

如何在事件模型中显示课程信息?

例如标题(数学,科学),时间(从,到)...

当我尝试显示页面时出现以下错误。

NoMethodError (undefined method `event' for #<Room:0x007fb2149a1ac8> 
Did you mean? events 
      events=): 
    app/views/schedules/_schedule.html.erb:6:in `block in _app_views_schedules__schedule_html_erb___2809280481749604534_70201410929300' 
    app/views/schedules/_schedule.html.erb:4:in `_app_views_schedules__schedule_html_erb___2809280481749604534_70201410929300' 
    app/views/users/show.html.erb:11:in `_app_views_users_show_html_erb__1629176981125983348_70201561746560' 

如果您能给我任何建议,我们将不胜感激。

user.rb

class User < ActiveRecord::Base 
    has_many :schedlues 
    has_many :rooms, through: :schedules 
    ... 

schedule.rb

class Schedule < ActiveRecord::Base 
    belongs_to :user 
    has_many :rooms 
    ... 

room.rb

class Room < ActiveRecord::Base 
    belongs_to :schedlue 
    has_many :events 

event.rb

class Event < ActiveRecord::Base 
    belongs_to :room 

(虽然我认为 '房间的has_many事件' 是不正确的,我没有任何想法。)

模式

create_table "users", force: :cascade do |t| 
    t.string "name" 
    t.string "email" 
    ... 
end 

create_table "schedules", force: :cascade do |t| 
    t.string "title" 
    t.integer "user_id" 
    ... 
end 

create_table "rooms", force: :cascade do |t| 
    t.date  "date" 
    t.string "room_name" 
    t.integer "schedule_id" 
    ... 
end 

create_table "events", force: :cascade do |t| 
    t.time  "from" 
    t.time  "to" 
    t.string "title" 
    ... 
end 

users_controller.rb

class UsersController < ApplicationController 
    def show 
    @user = User.find(params[:id]) 
    @schedules = @user.schedules.paginate(page: params[:page]) 
    end 
    ... 

show.html.erb

<% if @user.schedules.any? %> 
     <ol class="schedules"> 
     <%= render @schedules %> 
     </ol> 
     <%= will_paginate @schedules %> 
    <% end %> 

_schedule.html.erb

<li> 
    <p> 
    <% schedule.room.each do |a| %> 
    <p><b>Day <%= a.day %></b></p> 
    <% a.event.each do |e| %> #error occur 
     <% if e.title.any? %> 
     <%= e.title %> 
     <% end %> 
    <% end %> 
    <p>room: <%= a.room_name %></p> 
    <% end %> 
    </p> 
</li> 
+0

你的错误说'未定义方法事件'为#

+0

谢谢你的回答,@ max pleaner。我犯了一个错字,我使用了'住宿'的'房间'。不胜感激,如果你能给我提示。 – SamuraiBlue

回答

0

如错误消息所述,Room没有方法event。原因是在你的模型中,你有has_many :events,它给你一个Association而不是一个事件。因此,尝试:

room.events.first 

或类似

room.events.each do |event| 
    puts event 
end 

这应该可以解决你现在得到的错误。

编辑我忘了看你的模板。下面一行是错误的:

<% a.event.each do |e| %> 

的解决方案是,如上面提到的:

<% a.events.each do |e| %> 

这是有趣的,你没有在schedule.room得到一个错误的方式。这也是错误的,它必须是schedule.rooms

+0

感谢您的回答,@ jdno。它在使用'<%a.events.each do | e |之后起作用%>”。我也删除了'<%if e.title.any? %>',因为错误。 – SamuraiBlue

相关问题