4

瀏覽器返回我在當地人#顯示以下錯誤:未定義的方法「模型名稱」的NilClass:

未定義的方法「模型名稱」的NilClass:類

51: <%= form_for(@food) do |f| %> 
52: <%= render 'shared/error_messages', object: f.object %> 
53: <div class="field"> 
54:  <%= f.label :nome %> 

這裏是我的locals_controller.rb (show動作)

def show 
    @local = Local.find(params[:id]) 
    @foods = @local.foods.paginate(page: params[:page]) 
    respond_to do |format| 
    format.html # show.html.erb 
    format.json { render json: @local } 
end 

這裏foods_controller.rb(在創建的has_many和belongs_to的

有什麼問題:動作)

def create 
@food = @local.foods.build(params[:food]) 
if @food.save 
    flash[:success] = "Food created!" 
    redirect_to '/locals' 
else 
    flash[:error] = "Error on creating food" 
    render '/locals' 
end 
end 

食品模型和局部模型與有關?感謝您通過添加以下代碼

+0

什麼是'@ local'?這聽起來沒有定義。 – Trip 2012-07-06 10:54:12

+0

@local = Local.find(params [:id]) – bugman 2012-07-06 11:05:08

+0

你的意思是該變量的範圍是錯誤的? – bugman 2012-07-06 11:05:52

回答

8

然後更改您的視圖代碼:

<%= form_for :food, :url => {:action => :create} do |f| %> 
+0

替換相同的行代碼 – 2012-07-06 12:06:15

+1

我沒有更多的頁面時顯示的錯誤,但當我嘗試通過填充字段創建一個新的食物,然後單擊提交按鈕我已被重定向到新的本地路徑,並沒有創建食物,你知道爲什麼嗎? – bugman 2012-07-06 12:13:33

+0

當我嘗試發佈調試器寫入以下內容: 食物:!紅寶石/哈希:的ActiveSupport :: HashWithIndifferentAccess 諾姆:一個 descrizione: '' PREZZO: '10' 承諾:郵政 動作:創建 控制器:當地人...我怎樣才能改變從當地人的食品控制器? – bugman 2012-07-06 12:50:00

2

檢查(我假設你的模式是本地)
@food = Local.new
在新的動作

+0

等待我有2模型之一是本地(has_many:食物),另一個是食物(that belongs_to:本地),所以你的意思是@food = Food.new? 無論如何它不起作用 – bugman 2012-07-06 11:34:47

+0

您需要在'show'操作中添加此代碼。你是否理解你的'@food'實例變量沒有在show action中設置,這就是爲什麼你會得到這個錯誤? – Salil 2012-07-07 12:34:41

0

如果發生這種情況雖然你編輯,但它的作品,而你創建

你必須添加一個之前的行動和設置食品

 before_action :set_food, only: [:show, :edit, :update, :destroy] 
0

您可以使用下列任何代碼:

<%= form_for :food, :url => {:controller => :food, :action => :create} do |f| %> 

<%= form_for :food, url: food_create_path do |f| %> 


<%= form_for Food.new , url: food_create_path do |f| %> 
相關問題