我创建了一个简单的表单来创建模型的实例,由于某种原因,它没有在控制器中调用create方法。这是表单代码:
<% @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模型和House模型之间存在多对一的关系...我对rails很新,但是我已经制作了类似形式的其他应用程序,我之前从未遇到过这个问题。我可以在控制台中创建和保存Mate对象,并且我没有收到任何错误,所以看起来某种程度上没有调用控制器方法。非常感谢任何帮助!
答案 0 :(得分:0)
事实上,如果其他事情没有问题,那么应该创建你的@mate对象。你只是无法在内页中看到它,因为你没有在你的代码中将@mate与house相关联。
在您的表单中,您引用了:house_id
,但在呈现表单时此属性为nil。
原因是你没有在控制器中分配它。
在控制器中,您需要从house对象初始化@mate
以在其中包含house_id
def new
@house = something
@mate = @house.mates.new # Instead of Mate.new
end