2010-10-21 71 views
2


我想知道哪条路是最好的解决我的问题:
我有一个表格,以便通过选择字段来选择的人。如果在选择字段中缺少名称,则可以使用文本字段直接添加该人员的姓名。
- new.html.erb中的表格是Team控制器的new操作的格式。
- 人员列表摘自People模型。选择字段,文本字段和外键

def new
@team = Team.new
@people = People.all
end

我在Team模型创建一个属性来存储new_person文本字段:

class Team < ActiveRecord::Base
attr_accessor :new_person
...
end

最后,这是我的观点的摘录:

<%= f.select :person_id, @people.map { |p| [p.name, p.id] } %>
<%= f.text_field :new_person %>

显然,我wo我希望在保存表格中的数据之前将新人保存在表Person中。像往常一样,该ID将被保存,而不是名字

在这一点上,我有两个问题:
1 /参数数组有钥匙new_person什么没有表。所以不可能使用Team.new(params[:team])方法。有没有简单的解决方案来避免这个问题? 2 /因为我需要person_id,当名字来自new_person字段时,我怎么能得到它?在使用before_filter方法?

非常感谢,
卡米耶。

回答

0

1)您应该考虑在您的form_for块内的视图中使用fields_for。这将允许您指定fields_for块内的字段是不同模型的属性,将生成适当命名的输入字段,并允许您在控制器中使用params [:team]。有关详细信息,请参阅FormHelper documentation

2)尽管您可以在控制器中执行一些操作,首先检查new_person字段中的值,创建记录,使用新创建的人员的值更新params [:team]的内容并创建团队,这对我来说有点像黑客。另一个可能不那么脆弱的解决方案是在页面上使用一些JavaScript,为用户创建某种模式对话框来创建新人员,将新人员提交给人员#create controller method,然后刷新drop下。使用Rails远程表单和不显眼的JavaScript,使用jQuery UI modal form(该链接的很好例子来做你需要的)来完成此操作可能不会非常困难。

这对您的第二个问题来说可能是比您希望的更困难的解决方案,但从长远来看可能更有用。