2013-10-27 4 views
1

Новое в RoR. Я делаю простой блог для публикации музыкальных записей. У меня есть две модели Tune и Artist, где принадлежит персонажу художнику. Я использую simple_form для рендеринга моей формы. Проблема, с которой я сталкиваюсь, заключается в том, что simple_form подтягивает правильные ассоциации, но когда я нажимаю кнопку «Отправить», она не сохраняет ассоциацию правильно и проверка не проходит. Код ниже:Rails Simple_Form Association Не работает

Классы

class Tune < ActiveRecord::Base 
    belongs_to :artist 
    validates :artist, presence: true 
end 

class Artist < ActiveRecord::Base 
    has_many :tunes 
end 

Схема базы данных

ActiveRecord::Schema.define(version: 20131027190309) do 

    create_table "artists", force: true do |t| 
    t.string "name" 
    t.string "real_name" 
    t.string "gender" 
    t.string "city" 
    t.string "country" 
    t.string "artist_soundcloud_link" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 

    create_table "tunes", force: true do |t| 
    t.string "soundcloud_link" 
    t.string "download_link" 
    t.string "download_label" 
    t.string "name" 
    t.string "style" 
    t.boolean "mix" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    t.integer "artist_id" 
    end 

    add_index "tunes", ["artist_id"], name: "index_tunes_on_artist_id" 

end 

Моя форма

<%= simple_form_for @tune, :html => { :class => 'form-horizontal' } do |f| %> 
    <%= f.input :name %> 
    <%= f.input :soundcloud_link %> 
    <%= f.input :download_label %> 
    <%= f.input :download_link %> 
    <%= f.input :mix %> 
    <%= f.association :artist%> 
    <%= f.button :submit %> 
<% end %> 

ответ

0

Добавить следующие строки в модели Tune

accepts_nested_attributes_for :tunes 

, а затем добавьте сильные параметры к вашему контроллеру, например.

params.require(:artist).permit(:id, :name, ... , tune_attributes: [:id, :name, :real_name, ...]) 

ПРИМЕЧАНИЕ: Я предполагаю, что ваши используют рельсы 4

+0

все еще работает в том же номере. Я думаю, вы правы, что это связано с вложенными атрибутами, но в этом случае художник является родительским классом, а настройка - это дочерний класс (имеет столбец artist_id). Когда я читаю документацию, accepts_nested_attributes_for обычно назначается родительскому классу, а не дочернему классу. – Matt

+0

вправо, я обновил. – amjad

+0

Почему вы делаете проверки: художник, присутствие: правда?. Художник должен быть подтвержден в модели исполнителя. Удалите его и попробуйте. Можете ли вы пропустить свой вывод консоли для ошибки? – amjad