簡體   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