基本上,我有一个Events模型和一个EventSets模型。事件有EventSet(如果适用),所以我可以在应用程序中相应地列出和分组它们(比如,公园里的一组音乐会事件,每个音乐会事件都有稍微不同的属性,但大多数数据对该集中的所有事件都是通用的)。
我有必要的关联,这样我就可以在Events#new中指定EventSet。
在我的EventSet模型中,我有几列"默认"信息(公共位置、公共名称等),我想用它们来预填充Events#new中的字段
新事件的EventSet由一个选择字段指定(该字段列出了从EventSet表中提取的所有EventSet)。
在Rails3(w/jQuery)中有标准的处理方法吗?或者我应该推出我自己的jQuery/AAJAX修复程序来处理它?(我喜欢在适当的时候坚持合理的默认值。)
编辑以澄清: 在提交表单之前(一旦选择EventSet),我正在尝试在/events/new视图中预填充表单字段。这是必要的,因为指定为"defaults"的EventSet通常会被覆盖用于给定的事件。。。它们只是为用户节省输入重复的起点
使用after_initialize回调
def after_initialize :copy_stuff
def copy_stuff
return unless self.new_record?
@event_set = EventSet.find(...)
self.field1 = @event_set.field1
self.field2 = @event_set.field2
end
您也可以在控制器中执行类似的操作。
def new
@event_set = EventSet.find(...)
@event = Event.new(:field1 => @event_set.field1, :field2 => @event_set.field2)
...
end
编辑
您需要通过ajax请求获取这些字段
routes.rb
post '/get-eventset-fields' => 'events#event_set_fields', :as => :get_eventset_fields
events_controller.rb
def event_set_fields
@event_set = EventSet.find_by_id(params[:eventset_id])
render :json => @event_set.to_json
end
new.html.erb
var mycallback = function(data){
$('#event_field1').val(data.field1);
$('#event_field2').val(data.field2);
}
$("#eventset_select").change(function(){
$.post('<%= get_eventset_fields_path %>', {'eventset_id': $(this).val()}, mycallback, "json");
});