2014-01-22 3 views
2

Я вложенные атрибуты в моей форме и 2 модели - произведения искусства и ArtDescription, которые связанные HAS_ONE/BELONGS_TO, но я получил ошибкуActiveRecord :: AssociationTypeMismatch в Rails 4

ActiveRecord :: AssociationTypeMismatch в ArtworksController # создать ArtDescription (# 30842620) ожидается, получил ActionController :: Параметры (# 9409680)

что не так?

Форма

<%= form_for :artwork, url: artworks_path do |f| %> 
    <p> 
     name:<%= f.text_field :name %></br> 
     author:<%= f.text_field :author %></br> 
     date:<%= f.text_field :date %></br> 
     museum:<%= f.text_field :museum %></br> 
     place:<%= f.text_field :create_place %></br> 
     comment:<%= f.text_field :comment %></br> 
    </p> 
    <p> 
    <%= f.fields_for :art_description do |artdesc|%> 
     type:<%= artdesc.text_field :type %></br> 
     base:<%= artdesc.text_field :base %></br> 
     style:<%= artdesc.text_field :style %></br> 
     genre:<%= artdesc.text_field :genre %></br> 
     plot:<%= artdesc.text_field :plot %></br> 
     reference: <%= artdesc.text_field :reference %></br> 
     format_weight: <%= artdesc.text_field :format_weight%></br> 
     format_height:<%= artdesc.text_field :format_height %></br> 
     <% end %> 
     <%= f.submit ('Ok')%> </p> 
    <% end %> 

Контроллер ArtworksController

def create 
@artwork = Artwork.create(artwork_params) 
if @artwork.save 
     redirect_to artwork_path(@artwork) 
    else 
     render 'new' 
    end 
end 

Модель

class Artwork < ActiveRecord::Base 

has_one :art_description 
accepts_nested_attributes_for :art_description 
end 

Сильные Parametrs

def artwork_params 
params.require(:artwork).permit(:name, :author, :date, :museum, :comment, :create_place, art_description: [ :type, :base, :style, :genre, :plot, :reference, :format_weight, :format_height]) 
end 
+1

Возможный дубликат [? Почему я получаю AssociationTypeMismatch при создании моей модели объекта] (http://stackoverflow.com/questions/2663141/why -do-я-найми-associationtypemismatch-когда-создание-моя-модель-объект). Принятый ответ, в частности, может дать решение, которое вы ищете. –

ответ

5

Ваша сильная PARAMS линия должна использовать art_description_attributes, не art_description:

params.require(:artwork).permit(:name, :autor, :date, :museum, :comment, :create_place,  art_description_attributes: [ :type, :base, :style, :genre, :plot, :reference, :format_weight, :format_height]) 
+1

К сожалению, он не работает – Mikkie

+0

Я должен использовать 'form_for @ artwork' вместо' form_for: artwork', а затем art_description_attributes. Благодаря! – Mikkie

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