2015-01-21 7 views
0
class Activity < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :contract 
    belongs_to :customer 
    has_one :expense 
end 

class Expense < ActiveRecord::Base 
    belongs_to :activity 
end 

Я получаю undefined method expense' for nil:NilClass, когда я пытаюсь создать один Expense в ExpensesController:не определен метод с has_one - belongs_to Assocation

if !activity.try(:expense) 
     activity.expense.create(ref: @current_date, year: session[:current_year], month: session[:current_month], 
           days:["1", "2"]) 
end 

Я полагаю, что это нормально, так как сервер пытается вызвать expense от чего-то это nil.

Проблема в том, что исходный код не мой. Мне пришлось добавить связь между Activity и Expenses. Что делать, чтобы создать новый Expenses?

EDIT: вот полный код show действия ExpensesController

def show 
if session[:current_month] == nil && session[:current_year] == nil 
    session[:current_month] = params[:month] 
    session[:current_year] = params[:year] 
else 
    if session[:current_month] != params[:month] || session[:current_year] != params[:year] 
    session[:current_month] = params[:month] 
    session[:current_year] = params[:year] 
    end 
end 

@calendar, @previous_month, @next_month, @month_name = get_calendar(session[:current_year], session[:current_month]) 
@current_date = @month_name + " " + session[:current_year] 

# If expense does not exist, create one with current month 
activity = Activity.where(month: params[:month], year: params[:year]).first 
if activity.try(:expense) 
    @nb_days = 0 
    @calendar.each do |c| 
     @nb_days += 1 
    end 
else 
    activity.expense.create(ref: @current_date, year: session[:current_year], month: session[:current_month], 
          days:[""]) 
end 
@expense = activity.expense 
end 

ответ

1

Если я правильно читать это, ваша activity переменная является нулевым. Я думаю, проблема лежит здесь:

activity = Activity.where(month: params[:month], year: params[:year]).first 

Это не возвращает никаких записей.