由于缺少未被调用的方法,创建新记录会返回NoMethodError

时间:2010-11-17 20:12:41

标签: ruby-on-rails activerecord

我一直在研究一个带有has_many的项目:通过一个故事和一个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 :(得分:0)

根据你的路线,我希望你的故事表有一个stack_id,模型有类似的东西:

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

故事表中是否有stack_id字段?