选择字段,文本字段和外键

时间:2010-10-21 17:26:38

标签: ruby-on-rails


我想知道哪种方式最好解决我的问题:
我有一个表单,以便通过选择字段选择人。如果选择字段中缺少名称,则可以使用文本字段直接添加此人的姓名 - new.html.erb中的表单是new控制器的Team操作的格式。
- 人员列表是从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 %>

显然,我希望在保存表单中的数据之前将新人保存在表Person中。像往常一样,id被保存而不是名称

此时,我有两个问题:
1 / params数组的键new_person没有表。因此无法使用Team.new(params[:team])方法。是否存在避免此问题的简单解决方案? 2 /由于我需要person_id,如果名称来自new_person字段,我怎么能得到它?使用before_filter方法?

非常感谢,
卡米尔。

1 个答案:

答案 0 :(得分:0)

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

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

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