我爲我的應用程序創建了一個留言板,並使用以下三個模型來處理整個事情:論壇有很多主題,主題有很多帖子。 Posts是Topic的嵌套資源,每當用戶選擇「Create New Topic」時,'new'操作都有一個嵌套的帖子來啓動線程。這裏是一個相對碼...Rails 3 - 嵌套資源返回的控制器'new'動作'NoMethodError'
topics_controller.rb
class TopicsController < ApplicationController
load_and_authorize_resource
def new
@topic = Topic.new
@post = @topic.posts.build
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @topic }
end
end
[...]
topic.rb
class Topic < ActiveRecord::Base
has_many :posts
belongs_to :user, :counter_cache => TRUE
belongs_to :forum, :counter_cache => TRUE
validates :title, :length => { :maximum => 95 }, :presence => { :message => "You need to title your topic." }
accepts_nested_attributes_for :posts
end
post.rb
class Post < ActiveRecord::Base
belongs_to :user, :counter_cache => TRUE
belongs_to :forum, :touch => TRUE, :counter_cache => TRUE
belongs_to :topic, :touch => TRUE, :counter_cache => TRUE
validates :body, :presence => { :message => "You have not written any text in the body." }
end
new.html.erb
<%= form_for(@topic, :url => forum_topics_path) do |f| %>
<%= f.label :title %><%= f.text_field :title %>
<%= fields_for(@post) do |cf|%>
<%= cf.label :body %><%= cf.text_area :body, :cols=> 108, :rows => 10 %>
<% end %>
<%= f.submit %>
<% end %>
無論如何,我完成了這一點,它工作得很好。
直到現在。無緣無故,無論我有什麼理由,無論何時,只要選擇「創建新主題」並指向主題上的「新」操作,我都會收到「NoMethodError in Topics#new」錯誤:您有一個無對象當你沒有想到的時候,你可能已經期待了一個Array的實例,在評估nil時出現了錯誤[]「
這使得絕對沒有任何意義,因爲我回頭看看以前的版本在git中,這個代碼沒有任何破壞性的變化。也許一些更新的Rails版本(3.0.7)或Gem負責,但我不知道這一點。
無論如何,它正在拋出的線在html.erb文件中,<%= fields_for(@post)do | cf |%>。呃...這是新的,所以它應該是零,對不對?把它拿出來,它就可以工作。我試着在Topic控制器中重新定義@post作爲Post.new,但是它返回相同的錯誤。另外,我在Google上搜索的任何內容都說@post = @ topic.posts.build是要走的路。
所以我在上面的代碼中做錯了什麼?以及任何想法,爲什麼它會以前工作,但現在不?
答曰到其他人,因爲他們排在第一,但沒錯,嘗試這種方式的工作原理也一樣,它缺乏f.fields_for。 – Shannon 2011-04-30 16:32:21
檢查時間戳,我先回答。 :) – mbreining 2011-04-30 16:33:14
哎呀,你是對的,修好了。是的,這很公平。 – Shannon 2011-04-30 16:37:30