2010-11-17 29 views
1

我一直在使用Anthologies加入Story和Stack模型之间的has_many:through关系来处理项目。我最近调整了一些打破新故事创作方法的东西,但我不确定如何排除故障。当我去添加故事时,出现以下错误:创建新记录会返回NoMethodError,因为缺少未调用的方法

**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:根据你的路由通过......

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

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

你能告诉我们模型代码吗?我在猜测Story有'belongs_to:stack' – zetetic 2010-11-17 20:54:51

+0

更新了原来的帖子以包含。 – iamlemur 2010-11-17 21:47:08

回答

0

我期望你的故事表有一个stack_id和模型有类似的东西:

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

故事表中是否有stack_id字段?

+0

没有。故事和堆栈有has_many关系:通过Anthologies,其中stack_id作为列。当我尝试创建一个与Stack没有任何关系的故事时,我无法弄清楚它为什么要调用它。 – iamlemur 2010-11-17 21:31:35

+0

我怀疑铁轨没有处理has_many:通过资源。看看http://stackoverflow.com/questions/282127/rails-map-resources-with-has-many-through-doesnt-work/805948#805948获取解释和可能的尝试途径。 – 2010-11-17 22:38:49

+0

谢谢。结果发现它与acts_as_list插件冲突 - 这只能说明我没有在这里缩小模型来做任何好处。 – iamlemur 2010-11-19 06:38:19

相关问题