Rails - 允许模型与现有对象关联或创建新对象

时间:2011-06-22 15:56:45

标签: ruby-on-rails ruby-on-rails-3 forms

假设我有两个模型EventPerson。一个活动有一个人的协调员:

class Event < ActiveRecord::Base
    belongs_to :coordinator, :class_name => 'Person', :foreign_key => 'coordinator_id'
    accepts_nested_attributes_for :coordinator
end

class Person < ActiveRecord::Base
    validates :name, :length => 20
end

在我的表单中,我想让用户从现有的People对象中选择(比如一个单选按钮列表),还有一个文本框来创建一个新的Person(在文本框中输入名称)

我如何优雅地实现这一点?我可以弄明白,但它涉及到控制器中很多丑陋的代码,并且很难验证。

2 个答案:

答案 0 :(得分:2)

我做了类似的事情,其中​​单选按钮设置了人[id]然后我只是检查了id。

所以在我的控制器#create方法:

if params[:person][:id]
   @person = Person.find(params[:person][:id])
else
   @person = Person.new(params[:person])
   #Handle saving @person here.
end

如果表单发送,即使没有选择任何内容,您也可能必须删除id块中的else参数。

编辑以回答验证问题:

#Handle saving @person here.中,您可以执行通常用于创建对象的操作。喜欢:

if @person.save
  flash[:notice] = "User created successfully"
else
  render :action => 'new' # (or whatever the action is)
  return
end

答案 1 :(得分:0)

每次保存人员时,都会执行人员验证码。 要保存绕过验证器,请写@ person.save( false ) 希望它整合pcg79的答案