0

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

4

1 回答 1

0

事实上,如果其他事情没有问题,你的@mate对象应该被创建。您只是无法在主页页面中看到它,因为您没有在代码中将 @mate 与 house 相关联。

在您引用的表单:house_id中,但是在呈现表单时此属性为零。

原因是您没有在控制器中分配它。

在控制器中,您需要@mate从 house 对象初始化以在其中包含 house_id

def new
  @house = something
  @mate  = @house.mates.new  # Instead of Mate.new
end
于 2013-07-01T04:37:32.890 回答