Rails形成不创建对象

时间:2013-07-01 04:18:31

标签: ruby-on-rails forms

我创建了一个简单的表单来创建模型的实例,由于某种原因,它没有在控制器中调用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对象,并且我没有收到任何错误,所以看起来某种程度上没有调用控制器方法。非常感谢任何帮助!

1 个答案:

答案 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