Ожидается узел, есть строка - PullRequest
1 голос
/ 18 апреля 2011

Я пытаюсь построить древовидную структуру, поэтому я создал модель Node с самосоединением:

class Node < ActiveRecord::Base
  has_many :child_nodes, :class_name => "Node", :foreign_key => "parent_id"
  belongs_to :parent, :class_name => "Node"

Вот схема:

create_table "nodes", :force => true do |t|
  t.integer  "key"
  t.decimal  "value",      :precision => 8, :scale => 2
  t.decimal  "prob",       :precision => 8, :scale => 2
  t.integer  "parent_id"
  t.datetime "created_at"
  t.datetime "updated_at"
end

Кажется, всеработать нормально, когда я запускаю тесты или когда я создаю Node через консоль.Однако, когда я запускаю приложение и создаю новый узел с помощью формы в / node / new, я получаю следующую ошибку:

ActiveRecord::AssociationTypeMismatch in NodesController#create

Node(#2162787060) expected, got String(#2151988680)

В чем проблема?

EDIT: Добавлена ​​форма и create

<%= form_for(@node) do |f| %>
  <% if @node.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@node.errors.count, "error") %> prohibited this node from being saved:</h2>

      <ul>
      <% @node.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :key %><br />
    <%= f.number_field :key %>
  </div>
  <div class="field">
    <%= f.label :parent %><br />
    <%= f.number_field :parent %>
  </div>
  <div class="field">
    <%= f.label :value %><br />
    <%= f.number_field :value %>
  </div>
  <div class="field">
    <%= f.label :prob %><br />
    <%= f.number_field :prob %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

Создать:

def create
  @node = Node.new(params[:node])

  respond_to do |format|
    if @node.save
      format.html { redirect_to(@node, :notice => 'Node was successfully created.') }
      format.xml  { render :xml => @node, :status => :created, :location => @node }
    else
      format.html { render :action => "new" }
      format.xml  { render :xml => @node.errors, :status => :unprocessable_entity }
    end
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...