2014-11-21 105 views
0

我正在開發一個簡單的應用程序,它重用了Michael Hartl着名的Rail Tutorial的示例應用程序的一些代碼。更具體地說,我重新使用用戶模型,但將其重新命名爲「帳戶」。我想我已經取代了用戶模型的所有引用,但不知何故無法讓我的代碼工作。這裏是我的代碼:Rails教程:會話幫助中的NameError

class Account < ActiveRecord::Base 
include Person 
include Contact 
has_many :coworkers, :class_name => 'Coworker' 
has_many :customers, :class_name => 'Customer' 
has_many :locations, :class_name => 'Location' 
has_many :appointment_types, :class_name => 'AppointmentType' 
before_save { self.email = email.downcase } 
has_secure_password 
attr_accessor :remember_token 
validates :password, length: { minimum: 6 } 
# rem_notice_hrs 
validates :rem_notice_hrs, presence: true 
validates :rem_notice_hrs, numericality: true 
# rem_text 
validates :rem_text, presence: true 
# mandatory email: 
validates :email, presence: true, length: { maximum: 255 }, 
     format: { with: VALID_EMAIL_REGEX } 

after_initialize :init 

private 

def init 
    if self.new_record? 
    if self.rem_notice_hrs.nil? 
     self.rem_notice_hrs = 24 
    end 
    if self.rem_text.nil? 
     if self.company.nil? 
     self.rem_text = "Dear [customer title: automatic] [customer family name: automatic], this is a reminder of your appointment with %{title} %{family_name} on [date/time]." 
     else 
     self.rem_text = "Dear [title] [customer family name], this is a reminder of your appointment with %{company} on [date/time]." 
     end 
    end 
    if self.start_day.nil? 
     self.start_day = Time.now 
    end 
    end 
end 
end 

這裏是會議助手:

module SessionsHelper 

# Logs in the given user. 
def log_in(account) 
session[:account_id] = account.id 
end 

# Returns the current logged-in user (if any). 
def current_account 
@current_account ||= Аccount.find_by(id: session[:account_id]) 
end 

# Returns true if the user is logged in, false otherwise. 
def logged_in? 
!current_account.nil? 
end 
end 

這裏是頭部分:

<header class="navbar navbar-default navbar-fixed-top"> 
<div class="container"> 
<a class="navbar-brand" href=<%= root_path %>><font color="red">Sample Application<sup>&reg;</sup></font></a> 
<nav> 
    <ul class="nav navbar-nav"> 
    <% if logged_in? %> 
    <% else %> 
     <li class="active"><a href=<%= root_path %>>Home</a></li> 
     <li><a href=<%= demo_path %>>Try Demo</a></li> 
     <li><a href=<%= pricing_path %>>Pricing &amp; Sign up</a></li> 
     <li><a href="#login">Login</a></li> 
    <% end %> 
    </ul> 
</nav> 
</div> 
</header> 

當我跑我得到

NameError in StaticPages#home 
Showing /Users/nnikolo/Documents/private/rails_projects/appmate/app/views/layouts/_header.html.erb where line #6 raised: 

undefined local variable or method `Аccount' for #<#<Class:0x007fbc1ede96f8>:0x007fbc1ede8b18> 
app/helpers/sessions_helper.rb:10:in `current_account' 
app/helpers/sessions_helper.rb:15:in `logged_in?' 
app/views/layouts/_header.html.erb:6:in `_app_views_layouts__header_html_erb___3728230762564015047_70222988074560' 
app/views/layouts/application.html.erb:20:in `_app_views_layouts_application_html_erb___3720454973504965845_70222923917160' 
代碼

換句話說,由於某種原因,Sess離子助手無法識別Account類。當帳戶被用戶取代時,教程中的相同代碼將起作用。

有趣的是,當我決定包括在SessionsHelper帳戶模型(我不應該需要做的,但我這樣做只是作爲一個實驗)我得到

wrong argument type Class (expected Module) 

你可以找到更多細節截圖:

enter image description here

什麼問題? 爲什麼SessionsHelper無法查看帳戶模型?事實上,它看不到任何模型 - 我用「include Reminder」(另一個ActiveRecord模型)替換了「include Account」,並且我得到了相同的錯誤消息。所有的模型對助手都是可見的 - 爲什麼這裏不是這種情況?

P.S.我沒有跑遷移,但我不認爲這個問題是存在的,但這裏是schema.rb的相關章節:

create_table "accounts", force: true do |t| 
    t.string "password_digest",        null: false 
    t.string "remember_digest" 
    t.string "activation_digest" 
    t.boolean "activated",      default: false 
    t.datetime "activated_at" 
    t.string "title" 
    t.string "first_name" 
    t.string "last_name" 
    t.string "company" 
    t.string "email",    limit: 100,     null: false 
    t.integer "phone",    limit: 8,     null: false 
    t.integer "rem_notice_hrs",        null: false 
    t.string "rem_text",   limit: 140,     null: false 
    t.datetime "start_day",          null: false 
    t.datetime "end_day" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 

回答

0

我最終將'Account'命名爲'User'。現在一切正常。仍然不知道什麼是錯的。似乎有某種與'用戶'名字相關的'魔術'。

0

從它似乎什麼,要麼你還沒有改變的遷移,以反映帳號或者你還沒有運行該文件的遷移。請分享您的schema.rb文件的內容。

+0

感謝您的回覆 - 只是做了它 – Nick 2014-11-21 19:13:13

0

Account是一類。
SessionsHelper是一個模塊。

不能包括AccountSessionsHelper因爲一類不能混合在的模塊。這是相反的。

這就是爲什麼你得到TypeError StaticPages#home