belongs_to - 未定义的方法

时间:2014-07-26 10:04:52

标签: ruby-on-rails ruby ruby-on-rails-4

首先,我向您展示我如何添加belongs_to关联:

user.rb:

class User < ActiveRecord::Base
  [...]
  has_many :schedules
  [...]
end


计划模型:( console-command)

rails g model Schedule user_id titel location time


schedule.rb:

class Schedule < ActiveRecord::Base
  belongs_to :user
end


routes.rb中:

Calendar::Application.routes.draw do
  [...]
  resources :users, only: :index
  [...]
end


welcome_controller.rb:

class WelcomeController < ApplicationController
  def index
    @schedules = current_user.schedules
  end
end


欢迎\ index.html.erb:

[...]
  <% if current_user %>
      <%= for schedule in @schedules do %>
          <strong><%= schedule.titel %></strong>
          <%= schedule.time %>
          <%= schedule.location %>
      <% end %>
  <% else %>
[...]


db:migrate工作正常。

结果:
例外: 未定义的方法`时间表&#39;为零:NilClass

def index
   @schedules = current_user.schedules
end

<小时/> 好吧,没有时间表方法。但我这样做是因为 Rich Peck 说,我认为他知道该怎么做 为了更好地理解,我应该添加第一个question 简短信息:
有一个html表应该有这个内容:标题日期,标题,时间,位置 如您所见,这是一个时间表 schedule-model属于user_model 我想在welcome-index-view中使用schedule-model 我希望你能掌握所有需要帮助我的信息 任何人都可以帮我修理它吗?

<小时/> 修改

application_controller.rb:

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception
  helper_method :current_user

  def current_user
    # Note: we want to use "find_by_id" because it's OK to return a nil.
    # If we were to use User.find, it would throw an exception if the user can't be found.
    @current_user ||= User.find_by_id(session[:user_id]) if session[:user_id]
    @current_user ||= User.find_by_authentication_token(cookies[:auth_token]) if cookies[:auth_token] && @current_user.nil?
    @current_user
  end
end

1 个答案:

答案 0 :(得分:0)

Frederick Cheung 表示协会没有任何问题 问题是 current_user是nil ,因此我将其修复如下:

<强> welcome_controller.rb:

class WelcomeController < ApplicationController

  def index
    if(current_user)
      @schedules = current_user.schedules
    end
  end

end