Что вызывает эту ошибку AssociationTypeMismatch? - PullRequest
1 голос
/ 27 апреля 2011

Я создаю базовую доску объявлений, в которой много комментариев относятся к сообщению, а сообщение относится только к одной теме. Моя проблема в том, что я не уверен, как создать новую Topic из формы Post модели. Я получаю сообщение об ошибке в своем контроллере почты:

ActiveRecord::AssociationTypeMismatch in PostsController#create

Topic(#28978980) expected, got String(#16956760)

app/controllers/posts_controller.rb:27:in `new'
app/controllers/posts_controller.rb:27:in `create'

приложение / контроллеры / posts_controller.rb: 27

@post = Post.new(params[:post])

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

topic.rb:

class Topic < ActiveRecord::Base
  has_many  :posts, :dependent => :destroy
  validates :name,  :presence => true,
                    :length => { :maximum => 32 }
  attr_accessible   :name  
end

post.rb:

class Post < ActiveRecord::Base
  belongs_to :topic,    :touch => true
  has_many   :comments, :dependent => :destroy
  attr_accessible :name, :title, :content, :topic
  accepts_nested_attributes_for   :topics, :reject_if => lambda { |a| a[:name].blank? }
end

comment.rb:

class Comment < ActiveRecord::Base
  attr_accessible        :name, :comment
  belongs_to :post, :touch => true
end

У меня есть форма:

<%= simple_form_for @post do |f| %>
  <h1>Create a Post</h1>
  <%= f.input :name %>
  <%= f.input :title %>
  <%= f.input :content %>
  <%= f.input :topic %>  
  <%= f.button :submit, "Post" %>  
<% end %>

И это действие контроллера: (создание сообщений)

def create
  @post = Post.new(params[:post]) # line 27
  respond_to do |format|
    if @post.save
      format.html { redirect_to(@post, :notice => 'Post was successfully created.') }
    else
      format.html { render :action => "new" }
    end
  end
end

Во всех примерах, которые я нахожу, теги принадлежат постам. То, что я ищу, отличается и, вероятно, проще. Я хочу, чтобы сообщение принадлежало одному тегу Topic. Как создать тему через контроллер сообщений? Может ли кто-нибудь указать мне правильное направление? Большое спасибо за чтение моего вопроса, я действительно ценю это.

Я использую Rails 3.0.7 и Ruby 1.9.2. Ох, и вот моя схема на всякий случай:

create_table "comments", :force => true do |t|
  t.string   "name"
  t.text     "content"
  t.integer  "post_id"
  t.datetime "created_at"
  t.datetime "updated_at"
end

create_table "posts", :force => true do |t|
  t.string   "name"
  t.string   "title"
  t.text     "content"
  t.integer  "topic_id"
  t.datetime "created_at"
  t.datetime "updated_at"
end

create_table "topics", :force => true do |t|
  t.string   "name"
  t.datetime "created_at"
  t.datetime "updated_at"
end

Еще раз спасибо.

Ответы [ 2 ]

1 голос
/ 27 апреля 2011

Вы должны иметь:

accepts_nested_attributes_for :topic

на Post, а не наоборот.

0 голосов
/ 01 мая 2011

@post = Post.new(params[:topic]) в моем контроллере исправлена ​​ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...