2014-01-23 4 views
0

У меня возникли проблемы с созданием записей в ассоциации с рельсами 4. Это в основном связь между Entry и Author, с таблицей соединений в середине, называемой AuthorsEntry. Схема выглядит следующим образом:Ошибка проверки правильности Rails 4 с has_many через ассоциацию

class Entry < ActiveRecord::Base 
    validates :name, presence: true 
    validates :from, presence: true 
    validates :to, presence: true 

    belongs_to :event 
    has_many :authors, through: :authors_entry 
    has_many :authors_entry 

class AuthorsEntry < ActiveRecord::Base 
    validates :author, presence: true 
    validates :entry, presence: true 

    belongs_to :author 
    belongs_to :entry 
end 

class Author < ActiveRecord::Base 
    belongs_to :event 
    has_many :entries, through: :authors_entry 
    has_many :authors_entry 

    validates :name, presence: true 
    validates :event, presence: true 
end 

В моих program_entries_controller.rb У меня есть следующие методы:

def create 
    @program_entry = Entry.new(program_entry_params) 

    author_ids_params.each do |id| 
     @program_entry.authors << AuthorsEntry.build(author_id: id) 
    end 

    @program_entry.event = @event 

    if @program_entry.save 
     flash[:notice] = t(:program_entry_created_successfully) 
     redirect_to organizer_event_program_entry_path(@event, @program_entry) 
    else 
     render :new 
    end 
    end 

def program_entry_params 
    params.require(:program_entry).permit(
     :name, :abstract, :'from(1i)', :'from(2i)', :'from(3i)', 
     :'from(4i)', :'from(5i)', :'to(1i)', :'to(2i)', :'to(3i)', :'to(4i)', 
     :'to(5i)' 
    ) 
end 

def author_ids_params 
    params.require(:program_entry).permit(:author_ids => []) 
end 

Я уже авторы сохраняются в моей базе данных, то создать действие нужно просто добавить новую запись для Модель ввода и таблица ассоциации (authors_entry). Но когда я пытаюсь сохранить запись, она всегда возвращает «is_invalid» над authors_entry.

+0

Почему вы повторяете 'validates: name, presence: true' три раза? –

+0

Упс! Типо, я исправлю немедленно. – Ingo86

ответ

2

Таблицу объединений следует называть AuthorEntries, чтобы следовать правилам рельсов.

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