使用来自其他模型的数据填充一个模型的表单字段(在Rails中)

时间:2011-06-10 21:34:28

标签: jquery ruby-on-rails ajax ruby-on-rails-3

基本上,我有一个Events模型和一个EventSets模型。事件有EventSets(如果适用),所以我可以在应用程序中相应地列出和分组它们(比如,在Park事件中的一组Concert,其中每个单独的Concert事件具有略微不同的属性,但是大多数数据对于所有事件都是通用的。那套)。

我有必要的关联,以便我可以在Events#new中指定一个EventSet。

在我的EventSet模型中,我有几列“默认”信息(常用位置,常用名称等),我想用它们预先填充Events#new中的字段。

新事件的EventSet由select字段指定(列出从EventSets表中提取的所有EventSet)。

在Rails 3(w / jQuery)中是否有标准的处理方法?或者我应该推出自己的jQuery / AJAX修复程序来处理它? (我喜欢在适当的地方坚持合理的默认值。)

编辑以澄清: 我正在尝试在提交表单之前仍然在/ events / new视图中预先填充表单字段(如一旦选择了EventSet)。这是必要的,因为对于给定的事件,EventSet指定的“默认值”通常会被覆盖......它们只是为用户节省输入重复的起点。

1 个答案:

答案 0 :(得分:0)

使用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

你也可以在Controller中做类似的事情。

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"); 
});