2015-03-28 3 views
0

Я относительно новичок в рельсах, и я не могу понять, как исправить эту ошибку. Так вот мои модели:Rails NoMethodError: неопределенный метод `valid? '

пользователя

class User < ActiveRecord::Base 
    before_save { email.downcase! } 
    has_many :tickets 
    has_many :events, through: :tickets 


    validates :first_name, presence: true 
    validates :last_name, presence: true 

    VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i 
    validates :email, presence: true, length: { maximum: 255}, 
        format:  { with: VALID_EMAIL_REGEX }, 
        uniqueness: { case_sensitive: false } 


end 

Событие:

class Event < ActiveRecord::Base 
    has_many :tickets 
    has_many :users, through: :tickets 

    validates :event_title, presence: true 
    validates :event_place, presence: true 
    validates :event_description, presence: true 
    validates :event_date, presence: true 
    validates_numericality_of :event_number_tickets, presence: true, numericality: { only_integer: true }, greater_than: 0 
end 

билетов:

class Ticket < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :event 
end 

У меня есть тестовый файл на билеты, который

require 'test_helper' 

class TicketTest < ActiveSupport::TestCase 

    def setup 
    @user = User.new(first_name: "Example", last_name: "User") 

    @event = Event.new(event_title: "Example Event", 
         event_place: "123 Example Ave.", 
         event_description: "Our example event for children to get introduced to technology", 
         event_date: DateTime.now, 
         event_number_tickets: 30) 
    @ticket = Ticket.new(event: @event, ticket_type: "regular", number_of_children: 1) 
    @user.tickets << @ticket 
    end 

    test "should be valid" do 
    assert @user.tickets.valid?  
    end 

end 

Всякий раз, когда я запускаю этот тест, я получаю следующее сообщение об ошибке:

NoMethodError: undefined method `valid?' for #<Ticket::ActiveRecord_Associations_CollectionProxy:0x007fae767617c8> 
    test/models/ticket_test.rb:18:in `block in <class:TicketTest>' 

Должен ли я создать собственный действующий метод для этого конкретного примера.

ответ

1

Для коллекции ActiveRecord не существует метода valid?. Если вы пытаетесь проверить, что последний выбранный вами билет действительно, вы можете сделать что-то вроде assert @ticket.valid?.

Я думаю, что вы можете сделать слишком много работы в своем методе настройки. Вы можете попытаться просто настроить свою модель пользователя и события в настройке и разбить остальную часть того, что вы описали, на различные тестовые блоки.

+0

Прежде всего, спасибо! Во-вторых, я просто хочу запустить тест, чтобы я мог создать событие и связать его с пользователем. Затем я хочу создать билет и связать его с событием. Затем для конкретного пользователя я хочу иметь возможность просматривать их события и билеты для указанного события –

+0

Cool. Я думаю, что вы, вероятно, слишком много работаете в методе настройки. Я бы создал пользователя и событие в вашем методе настройки, а затем вырвал каждое из того, что вы только что описали, в тестовые блоки. Я верну свой ответ на примере. –

+0

Получил это, нет необходимости в ели. еще раз спасибо –

Смежные вопросы