Создание новой записи возвращает NoMethodError из-за отсутствия метода, который не вызывается - PullRequest
1 голос
/ 17 ноября 2010

Я работал над проектом с has_many: через отношения между Story и моделью Stack, к которой присоединились Anthologies. Недавно я настроил что-то, что нарушило метод создания новых историй, но я не уверен, как его устранить. Когда я иду, чтобы добавить историю, я получаю следующую ошибку:

**NoMethodError in StoriesController#create**
undefined method `stack_id' for #<Story:0x1035968a8>

Что странно, так это то, что метод create не ссылается на 'stack_id'. На самом деле, это довольно из коробки:

def create
  @story = Story.new(params[:story])

  respond_to do |format|
    if @story.save
      flash[:notice] = 'Story was successfully created.'
      format.html { redirect_to(@story) }
      format.xml  { render :xml => @story, :status => :created, :location => @story }
    else
      format.html { render :action => "new" }
      format.xml  { render :xml => @story.errors, :status => :unprocessable_entity }
    end
  end
end

Я подумал, что, возможно, это как-то связано с маршрутами, поскольку они поддерживают доступ к историям как напрямую, так и в виде стеков. Но я попробовал несколько вариантов, и, похоже, ничего не изменилось.

map.resources :stories, :member => {:rate => :post}  
map.resources :anthologies
map.resources :stacks, :has_many => :stories do |stack|
  stack.resources :stories
end  

Я явно не понимаю, как объекты сохраняются здесь. Любые идеи о том, как я могу решить эту проблему? Я полностью потерян, что делать дальше. Я добавил вывод консоли на случай, если это будет полезно.

Спасибо.

Processing StoriesController#create (for 127.0.0.1 at 2010-11-17 21:45:29) [POST]
  Parameters: {"commit"=>"save", "story"=>{"body"=>"sgfhsfgh", "title"=>"asdfa", "user_id"=>"1", "summary"=>"adfgdfhg"}, "action"=>"create", "authenticity_token"=>"1yws3Fs108kPSUS2W5SM1GFaiRqfiWhDbzDWstfoDCA=", "controller"=>"stories"}
  User Load (0.3ms)   SELECT "users".id FROM "users" WHERE ("users"."id" = 1) LIMIT 1

NoMethodError (undefined method `stack_id' for #<Story:0x1035968a8>):
  (eval):13:in `send'
  (eval):13:in `scope_condition'
  app/controllers/stories_controller.rb:58:in `create'
  app/controllers/stories_controller.rb:57:in `create'

Rendered rescues/_trace (90.0ms)
Rendered rescues/_request_and_response (0.3ms)
Rendering rescues/layout (internal_server_error)

Добавление кода модели по запросу, но оно довольно общее: has_many: through ...

has_many :anthologies
has_many :stories, :through => :anthologies

и

has_many :anthologies
has_many :stacks, :through => :anthologies

1 Ответ

0 голосов
/ 17 ноября 2010

Исходя из ваших маршрутов, я ожидаю, что ваша таблица историй имеет stack_id, а модель имеет что-то вроде:

class Story < ActiveRecord::Base
  belongs_to :stack
  ..
end

Есть ли у вас поле stack_id в таблице историй?

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