2011-12-20 7 views
1

Я получаю эту ошибку:Ассоциация Тип Несовпадение

ActiveRecord::AssociationTypeMismatch (Design(#2199041060) expected, got String(#2151988680))

Я пытаюсь создать событие, при котором пользователь вводит некоторую информацию о событии и в то же время выбирает дизайн. Каждый раз, когда я нажимаю кнопку «Создать», происходит ошибка.

Вот мои модели:

class Design < ActiveRecord::Base 
    belongs_to :event  # User creates an Event and selects only one Design 
    belongs_to :user   # User could also create a Design 
end 

class Event < ActiveRecord::Base 
    belongs_to :user  # A user can create as many events 
    has_one  :design # User can only select one design for this event 
end 

Вот мой контроллер событий

def create 
    @event = Event.new(params[:event]) 
    @user = current_user 
    @designs = Design.all 

    if @event.save 
    flash[:success] = "Event created" 
    @user.events << @event 
    redirect_to events_path 
    end 
end 

Вот мой Event View:

<%= form_for @event, :url => {:action => 'create', :id => @event.id } do |e| %> 
<p>Enter a title for this event: <%= e.text_field :title %> </p> 

<p>Select a design:</p> 
<ul class = "list"> 
    <% @designs.each do |design| %> 
     <li><%= e.radio_button :design, design.id %> <%= design.name %></li> 
    <% end %> 
</ul> 
    <%= e.submit "Create" %> 
<% end %> 
+1

Без полной ошибки я только сделать укол здесь, но это похоже на какой-то момент база данных ожидал вас передать объект дизайна и вместо этого получил строку – ScottJShea

ответ

1
<%= e.radio_button :design, design.id %> 

Вы фактически не проходя весь объект дизайна для вашей модели событий - только идентификатор, так что это должно реально отражать, что, используя вместо этого:

<%= e.radio_button :design_id, design.id %> 

Edit: и добавить к вашему модель событий:

def design_id=(the_id) 
    return unless the_id 
    the_design = Design.find_by_id(the_id) 
    self.design = the_design if the_design 
end 
+0

Нет, это не сработало, я получил эту ошибку undefined method 'design_id 'для # ' Я предполагаю передать идентификатор события в модель Design, правильно? Поскольку событие может иметь только один дизайн. – Moose

+0

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

2

На ваш взгляд, изменения: дизайн: design_id.

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