对于半通用标题感到抱歉,但我仍然很擅长使用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。
答案 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 %>
但我真的不确定! ]