Rails拥有并且属于许多形式问题

时间:2010-06-14 17:25:15

标签: ruby-on-rails many-to-many erb has-and-belongs-to-many

对于半通用标题感到抱歉,但我仍然很擅长使用rails,并且无法想出一个简洁的方式来提出这个问题。

我有一个基本的habtm模型设置:项目有很多资源,资源可以有很多项目。我正确地设置了数据库和模型,并且可以通过控制台完成我需要的所有操作,但是我无法将其全部转换为视图。

在项目的show视图中,我希望能够创建资源并自动将其分配给当前的项目。这是我的基本html:

<p>
  <b>Name:</b>
  <%=h @project.name %>
</p>

<h2>Equipment</h2>
<ul>
  <% @project.resources.each do |r| %>
    <li><%=h r.name %></li>
  <% end %>
</ul>
<h2>Add A Resource</h2>
<% form_for(@project) do |f| %>
  <%= f.error_messages %>

  <p>
    Resource Name:<br />
    <%= f.text_field :resources %>
  </p>
  <p>
    <%= f.submit 'Create' %>
  </p>
<% end %>

显然,这种形式不起作用,但我不知道接下来要做什么。我一直在寻找各种各样的例子,但是没有找到我想在这里做的事情。

我想到的一件事是将表单更改为form_for(Resource.new)并包含@project.id的隐藏输入。然后当resource_controller处理表单时,检查该ID并从那里开始。这似乎是一个丑陋的kludge。

2 个答案:

答案 0 :(得分:2)

如果您使用的是Rails 2.3或更高版本,则可以尝试使用accepts_nested_attributes_for让Project在收到新资源的属性时自动创建资源。它还具有不需要为控制器添加任何特殊功能的优点。

Ryan Daigle写了an excellent intro to accepts_nested_attributes_for,还有一个很棒的railscast(#196)。

我还没有尝试过HABTM关系,但我想它会和has_many示例类似。

答案 1 :(得分:1)

我相信你应该使用像

这样的东西
<% form_for(@project) do |f| %>
   <%= f.error_messages %>
   <% f.fields_for :resources do |resource_fields| %>
      <%= resource_fields.text_field :name %>          
   <% end %>
<% end %>

但我真的不确定! ]