0

我有一个可以有很多Projects的Client模型。

这些是我的视图文件:

编辑.html.erb

<%= form_for(@project) do |f| %>
  <%= render 'fields', :f => f %>
  <%= f.submit Create %>
<% end %>

_fields.html.erb

<div>
    <%= f.label :name %><br/>
    <%= f.text_field :name %>
</div>
<div>
    <%= f.label :client_id %><br/>
    <%= f.select(:client_id, current_user.client_names) %>
</div>

这很容易而且效果很好。

但是有没有办法从客户端视图中创建一个项目呢?

例如,在客户端编辑页面上,最好有一个链接New Project for this Client,该链接指向上面的New Project表单,但在选择框中预先选择了相应的客户端。

这可以以某种方式完成吗?

我似乎找不到将客户 ID 传递给新项目表单的方法。

谢谢你的帮助!

4

2 回答 2

2

这当然是可能的,但需要将客户端 ID 传递给 new_projects_path。这可以通过将路由嵌套在客户端内部的项目中来完成,或者只是附加客户端 ID。不同之处在于 URL 如下所示:

/clients/1/projects/new
- or -
/projects/new?client_id=1

在您的项目控制器中,您应该能够使用预选的客户端实例化 @project 变量:

@project = Project.new :client_id => params[:client_id]
于 2012-09-28T16:20:51.343 回答
0

是的,你可以这样做。您将在 Client 模型中使用 Accepts_nested_attributes_for :project 。嵌套这将允许您执行类似的操作

<%= f.fields_for :project do |p| %>
<fieldset>
<%= p.text_area :content %>
</fieldset>
<% end %>

查看关于嵌套模型表单的 railscasts 第 196 集。

于 2012-09-28T16:13:11.890 回答