Несоответствие типов ассоциаций - PullRequest
1 голос
/ 20 декабря 2011

Я получаю эту ошибку:

ActiveRecord :: AssociationTypeMismatch (ожидаемый дизайн (# 2199041060), получена строка (# 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

Вот мой вид событий:

<%= 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 %>

Ответы [ 2 ]

2 голосов
/ 20 декабря 2011

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

1 голос
/ 20 декабря 2011
<%= 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...