2013-07-01 75 views
0

我已經創建了一個簡單的窗體來創建一個模型的實例,並且由於某種原因它沒有在控制器中調用create方法。下面是表單代碼:Rails窗體不創建對象

<% @house.mates.each do |mate| %> 
    <p><%= mate.name %></p> 
<% end %> 

<h2>Add a new mate:</h2> 
<%= form_for @mate do |f| %> 
    <p><%= f.label "Name" %> 
     <%= f.text_field :name %> 
     <%= f.hidden_field :house_id %> 
    </p> 
    <%= f.submit "Submit", :action => :create %> 
<% end %> 

這裏是控制器代碼:

class MatesController < ApplicationController 

    def new 
    @mate = Mate.new 
    end 

    def create 
    @mate = Mate.new(params[:mate]) 
    @mate.save 
    redirect_to house_path(current_house) 
    end 

end 

有一個很多的伴侶模型和房屋模型之間的一個關係...我是相當新的軌道但我做了其他類似的應用程序,我從來沒有遇到過這個問題。我可以在控制檯中創建並保存Mate對象,並且我沒有收到任何錯誤,所以似乎控制器方法沒有被調用。任何幫助深表感謝!

+0

house_id你驗證house_id必須存在?你注意到你的伴侶對象沒有分配house_id嗎? – Henry

+0

所以,我不小心給了視圖的舊代碼,表單的第一行是'<%= form_for:mate,:url => {:action =>'create'} do | f | %>'否則我得到一個nomethod錯誤「model_name」。如下所述,我添加了對房子的引用,但仍然按下提交時,它會清除文本字段,並且什麼都不會發生。當我在控制檯中查看Mate.all時,沒有添加任何內容。 – user2136807

回答

0

事實上,如果其他東西沒有問題,應該創建您的@mate對象。你只是不能在家裏看到它,因爲你沒有在代碼中將@mate與房子關聯起來。

在您的表單中,您提到了:house_id,但在渲染表單時此屬性爲零。

原因是你沒有在控制器中分配它。

在您需要初始化從房屋目標@mate控制器內部都有

def new 
    @house = something 
    @mate = @house.mates.new # Instead of Mate.new 
end 
+0

使用'@ house.mates.new'而不是'@ house.mates.build'的原因是'build'會將空配偶添加到集合中,因此在視圖中添加一個空白空間 – Calin