2013-08-19 110 views
0

我有一個簡單的has_many關係,可以通過rails fields_for實現。我正在尋找Netzke的相同行爲。Netzke有很多關係和rails fields_for

這裏是類:

class Question < ActiveRecord::Base 
    attr_accessible :description, :title 
    validates_presence_of :title, :description 

    has_many :question_options 
    accepts_nested_attributes_for :question_options 

class QuestionOption < ActiveRecord::Base 
    attr_accessible :title, :question 
    validates_presence_of :title 

    belongs_to :question 

這裏是我建的形式:

class QuestionForm < Netzke::Basepack::Form 

    js_configure do |c| 
    c.mixin 
    end 

    def configure(c) 
    super 
    record.build_for_editing if record.present? 
    c.model = 'Question' 
    c.title = 'Question' 
    c.items = [:title, :description] 
    end  
end 

高達至此形式工作精細。我無法弄清楚如何實現has_many行爲,就像我們在rails中做的那樣fields_for

任何人都可以指導我如何在這種情況下使用netzke

回答

1

您是否試圖實現主從/一對多編輯?如果是這樣,在Netzke演示應用程序中給出了一個很好的例子(參見http://netzke-demo.herokuapp.com/中的老闆和辦事員)。

您需要創建三個組成部分:

  • 問題組件(主)從Netzke繼承:: Basepack ::電網
  • QuestionOption組件(詳細信息)從
  • Netzke :: Basepack繼承:: Grid Composite組件將前兩個
    組件組合起來,並添加一些JavaScript來同步它們。

首先,QuestionOption模型必須允許訪問主表的標識(Netzke的東西,沒有它不會工作)。

class QuestionOption < ActiveRecord::Base 
    attr_accessible :title, :question_id 
    validates_presence_of :title 
    belongs_to :question 
end 

這是組件的代碼:

class Questions < Netzke::Basepack::Grid 
    def configure(c) 
    super 
    c.model = 'Question' 
    c.items = [ 
     :description, 
     :title 
    ] 
    end 
end 

class QuestionOptions < Netzke::Basepack::Grid 
    def configure(c) 
    super 

    c.strong_default_attrs = {question_id: c.question_id} 
    c.scope = {question_id: c.question_id} 

    c.model = 'QuestionOption' 
    c.columns = [ 
     { name: :title, header: 'Option Title'} 
    ] 
    end 
end 

class QuestionsAndOptions < Netzke::Base 
    def configure(c) 
    super 
    c.items = [:questions, :question_options] 
    end 

    js_configure do |c| 
    c.layout = :border 
    c.border = false 
    c.height = '100%' 

    c.init_component = <<-JS 
     function() { 
     this.callParent(); 
     var questions = this.netzkeGetComponent('questions'); 
     var question_options = this.netzkeGetComponent('question_options'); 

     questions.on('itemclick', function(view, record) { 
      this.selectQuestion(record.get('id')); 
      question_options.getStore().load(); 
     }, this); 
     } 
    JS 
    end 

    endpoint :select_question do |id, this| 
    component_session[:selected_question_id] = id 
    end 

    component :questions do |c| 
    c.region = :center 
    end 

    component :question_options do |c| 
    c.region = :south 
    c.question_id = component_session[:selected_question_id] 
    c.height = '50%' 
    end 
end 

請嘗試,讓我知道,如果這是你所需要的。對不起,如果我誤解了你的問題。

問候

的Drazen

+0

你好德拉贊·皮特,其實我結束了這個解決方案,但我的要求是不同的東西。正如你已經知道我們如何在rails中構建'has_many'關係表單的機制。我們使用'fields_for'表單構建器和像'coocoon'這樣的好寶石幫助我們添加像'Add more'這樣的鏈接,請參考https://github.com/nathanvda/cocoon_simple_form_demo/blob/master/app/views/projects /_form.html.slim#L16。我在Netzke尋找類似的解決方案。 –