假设我有两个模型Event
和Person
。一个活动有一个人的协调员:
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(在文本框中输入名称)
我如何优雅地实现这一点?我可以弄明白,但它涉及到控制器中很多丑陋的代码,并且很难验证。
答案 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的答案