繁体   English   中英

使用来自另一个 model 的数据填充一个 model 的表单字段(在 Rails 中)

[英]Populating form fields for one model with data from another model (in Rails)

基本上,我有一个事件 model 和一个 EventSets model。 事件有 EventSets(如果适用),所以我可以在应用程序中相应地列出和分组它们(例如,公园里的一组音乐会事件,其中每个音乐会事件的属性略有不同,但大多数数据对所有事件都是通用的该集)。

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

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

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

在 Rails 3 (w/jQuery) 中有处理这个的标准方法吗? 或者我应该推出自己的 jQuery/AJAX 修复来处理它? (我喜欢在适当的情况下坚持合理的默认设置。)

编辑澄清:我正在尝试在提交表单之前在 /events/new 视图中预填充表单字段(一旦选择了 EventSet)。 这是必要的,因为 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

您也可以在 Controller 中执行类似的操作。

def new
   @event_set = EventSet.find(...)
   @event = Event.new(:field1 => @event_set.field1, :field2 => @event_set.field2)
   ...
end

编辑

您需要通过 ajax 请求获取这些字段

路线.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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM