«accepts_nested_attributes_for» не отображает поля в _form.haml частично - PullRequest
1 голос
/ 26 октября 2011

У меня проблема с головной болью.

в моем терминале я вижу, что таблица Trail просматривается. В этой таблице есть какие-то пустышки.

DEBUG - Account Load (0.4ms)  SELECT "accounts".* FROM "accounts" WHERE "accounts"."id" = 1 LIMIT 1
DEBUG - Trail Load (0.2ms)  SELECT "trails".* FROM "trails"
DEBUG - TEMPLATE (0.0004ms) /adventures/new
DEBUG - TEMPLATE (0.0002ms) /layouts/application
DEBUG - TEMPLATE (0.0004ms) /adventures/_form
DEBUG - TEMPLATE (0.0003ms) /base/_sidebar
DEBUG -      GET (0.0644ms) /admin/adventures/new - 200 OK

Я пытался и допустил ошибку на протяжении долгого времени, теперь он использует те же настройки, которые предлагает руководство Падрино в их руководстве "accepts_nested_attributes_for". Тем не менее, я не могу заставить форму отображаться в моем браузере для редактирования.

... / просмотров / приключения / _form.haml

.group_trail
  -f.fields_for :trails do |trail_form|
    =trail_form.label :start
    =trail_form.text_field :start
=trail_form.label :end
    =trail_form.text_field :end
    =trail_form.label :via
    =trail_form.text_field :via
    -unless trail_form.object.new_record?
      =trail_form.check_box '_destroy'
      =trail_form.label '_destroy', :caption => "Remove"

В html-источнике визуализируется group_trail, но ни одна из форм не содержит in.

...     
</div>
 <div class='group_trail'>
  </div>
    <div class='group navform wat-cf'>
    <input class="button" value="Save" type="submit" />

в моих моделях у меня есть:

class Adventure < ActiveRecord::Base  
    has_many :trails, :class_name => 'Adventure'
    accepts_nested_attributes_for :trails, :allow_destroy => true
end

class Trail < ActiveRecord::Base 
     belongs_to :adventure
end

У меня действительно был adventure_id в моей таблице следов, но я сейчас вернулся к более простому методу попытки, так как он, как говорят, не нужен для этой ассоциации nested_attributes.

Если я запускаю его с параметром adventure_id в таблице следов, он как бы пытается выбрать значение adventure_id из таблицы приключений.

     DEBUG - Account Load (0.3ms)  SELECT "accounts".* FROM "accounts" WHERE "accounts"."id" = 1 LIMIT 1
      DEBUG - Trail Load (0.2ms)  SELECT "trails".* FROM "trails"
      DEBUG - Adventure Load (0.2ms)  SELECT "adventures".* FROM "adventures" WHERE "adventures"."id" = ? LIMIT 1  [["id", "9"]]
      DEBUG - TEMPLATE (0.0004ms) /adventures/edit
      DEBUG - TEMPLATE (0.0002ms) /layouts/application
      DEBUG - TEMPLATE (0.0003ms) /adventures/_form
      DEBUG - Adventure Load (0.3ms)  SELECT "adventures".* FROM "adventures" WHERE "adventures"."adventure_id" = 9
      DEBUG - SQLite3::SQLException: no such column: adventures.adventure_id: SELECT "adventures".* FROM "adventures"  WHERE "adventures"."adventure_id" = 9
    ActiveRecord::StatementInvalid - SQLite3::SQLException: no such column: adventures.adventure_id: SELECT "adventures".* FROM "adventures"  WHERE "adventures"."adventure_id" = 9: 

Кто-нибудь знает, почему он ищет таблицу приключений вместо таблицы испытаний для adventure_id?

Кто-нибудь может указать на то, что я делаю неправильно? или укажете мне правильное направление, чтобы понять это?

1 Ответ

1 голос
/ 26 октября 2011

Возможно, проблема в самореференции.

class Adventure < ActiveRecord::Base  
  has_many :trails, :class_name => 'Adventure'
  accepts_nested_attributes_for :trails, :allow_destroy => true
end

Что такое:

foreign_key ?

т.е:

has_many :trails, :class_name => 'Adventure', :foreign_key => :trail_id

Или, если у вас есть это в другой таблице, вы должны:

has_many :trails, :class_name => 'Adventure', :foreign_key => :trail_id, :table_name => :trails

Я думаю, что вы также можете получить ошибку с консоли:

Adventure.first.trails
...