2013-04-14 23 views
0

我想爲EditNew方法使用相同的html格式。編輯和新方法的相同格式

控制器方法:

def new 
    render "edit" 
end 

def edit 
    if params[:id].present? 
    @goat = Goat.find(params[:id]) 
    else 
    @goat = Goat.new 
    end 
end 

Edit形式:

<% form_for @goat do |f| %>  
<%= f.text_field :title %> 
<%= f.submit "Update" %> 
<% end %> 

它非常適用時@goat記錄存在Edit方法,但對於New方法,當控制器發出@goat = Goat.new我得到了一個錯誤:

undefined method model_name for NilClass:Class

如何解決這個問題?

+1

您可以爲您的創建方法添加代碼嗎? – dpassage

+0

目前還沒有驗證...可否影響此錯誤? – Gediminas

+0

你說「在Create方法中我添加了渲染編輯」... – dpassage

回答

1

問題是你實際上沒有爲你的html設置新的@goat

在此代碼:

def new 
    render "edit" 
end 

這不叫你的控制器上的edit方法;而是直接進入視圖層來渲染edit.html.erb文件。因此,對於@goat集合沒有任何價值,因此會出現錯誤。

更好的是@ user2191327提供的代碼。你還應該看看腳手架爲你的控制器產生了什麼;這對於習慣性的Rails來說是一個很好的指導。

1

如果你只想使用相同的HTML只是使用渲染:模板

def new 
    @goat = Goat.new 
    render template: 'edit' 
end 

def edit 
    @goat = Goat.find(params[:id]) 
end 

或更好的辦法:使用渲染局部模板edit.html & & new.html

附:使用action'edit'而不是'new'不是一個好主意,所以如果你查看你的routes.txt文件,你會看到action的路徑包括:class instance的id。

+0

謝謝!我不知道如何以正確的方式使用它,但有一部分我錯了!再次感謝! – Gediminas

相關問題