未定义的方法`Calendar'为2:Fixnum

时间:2013-05-21 22:03:44

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

我正在尝试在我的用户页面上添加日历。我添加了到routes.rb文件的路由。但我无法理解为什么它不起作用。

route.rb

resources :users do
    resources :calendars
end 

该错误据说位于 calendars_controler.rb 的第21行:

   19   def new
   20     @user = current_user.id
   21     @calendar = @user.Calendar.new
   22   end

application.erb

<h1> <% picture3 = image_tag("../images/twit.png", :border =>0, :class =>"smallh1", :class => "blue")%> </h1>
<%= link_to picture3, new_user_calendar_path(current_user.id) %>

模型/ user.rb

 has_one :calendar 
    attr_accessible :calendar_id

我将user_id字段添加到日历索引页面。

模型/ calendar.rb

attr_accessible :event, :published_on, :description, :user_id
    belongs_to :user, :foreign_key => :user_id

任何帮助将不胜感激!

4 个答案:

答案 0 :(得分:2)

  1. 您的@user变量设置为用户的 ID ,而不是用户模型实例
  2. 您尝试从Calendar获取@user,而calendar是正确的字段名称,在 models / user.rb
  3. 中定义
  4. 您尝试从用户ID 获取calendar,而不是用户
  5. 解决方案是:

    1. 替换行

      @user = current_user.id
      

      @user = current_user
      
    2. 替换行

      @calendar = @user.Calendar.new
      

      @calendar = @user.calendar.new
      

答案 1 :(得分:0)

替换21

的行calendars_controller.rb
@calendar = @user.Calendar.new

@calendar = @user.calendar.new

答案 2 :(得分:0)

    def new
    @user = current_user.id
    @calendar = @user.Calendar.new
    end

在这里,您将@user即时变量分配给Fixnum(用户ID),这没有意义。

@user = current_user

这是正确的变体。是的,Ruby中的大写字母用于类名和模块名(这是某种特殊类)

答案 3 :(得分:0)

感谢你们,我解决了我的问题

为了解决这个问题

def new     @user = current_user     @calendar = @ user.build_calendar   端

当我使用关联时,函数new不存在它现在构建

再次感谢