2010-10-07 89 views
0

我有一些嵌套的屬性模型的事件表單。從選擇框中選擇客戶端後,將顯示其他模型。觀察者觀察並調用一個控制器動作,該動作呈現包含fields_for嵌套模型的部分。我遇到的問題是,我無法將事件「表單」塊傳遞給新呈現的部分 - 至少我無法弄清楚如何...將表單對象傳遞給從ajax請求呈現的部分

下面的代碼引發錯誤:「錯誤參數數量(0表示1)「。任何幫助或建議表示讚賞。如下所述,如果您可以爲此場景提供示例,我也願意使用不顯眼的JavaScript重新實現此功能。

活動形式:

<%- form_for @event do |form| %> 

    <%= select_tag :id=>event_client_id %> 
    <%= observe_field :event_client_id, url => {:action => 'client_questions'}, :with => "'client_id=' + encodeURIComponent(value)+'&event_id='+#{@event.id} %> 

事件控制器

def client_questions 
    @event = Event.find(params[:event_id]) 
    @client = Client.find(params[:client_id]) 
    @client_questions = @client.questions.active 
    respond_to do |format| 
    format.js { 
     render :update do |page| 
     page[:client_questions].replace_html :partial => 'client_questions', :layout => false 
     end 
    } 
    end 
end 

_client_questions.html.erb部分

<%- form.fields_for :client, @client do |client| %> 
    <%= client_text_field :name %> 

    <%- client.fields_for :questions do |question| %> 
    <%=question.text_field :content %> 
+0

One advice:use unobstrusive javascript http://en.wikipedia.org/wiki/Unobtrusive_JavaScript – marcgg 2010-10-07 12:47:24

+0

我願意做出這樣的改變。你能提供一個這種情況的例子嗎?我顯然在這個應用程序中使用原型,以便您可以利用該庫。 – 2010-10-07 13:08:22

+0

使用不顯眼的js在這種情況下沒有任何區別。雖然這被認爲是最佳做法,但在這裏並不重要。我希望這個應用程序不顯眼,但因爲我繼承了別人的代碼,所以我沒有這個選擇。 – 2010-10-08 13:52:19

回答

3

所以你的主要形式呈現在一個動作,而你希望將表單對象從該視圖中傳遞到另一個視圖中,在另一個部分中呈現?這不是東西,你可以做,但你可以修改您的視圖代碼在部分呈現的第二次,使之呈現,而無需對現有表單對象,像:

<%- fields_for "event[client_attributes]", @client do |client| %> 
    <%= client_text_field :name %> 

    <%- client.fields_for :questions do |question| %> 
    <%= question.text_field :content %> 

我還沒有運行該代碼來測試它,所以比較它生成的html和你的現有部分在與主窗體相同的動作中渲染時會生成的html。

+0

好主意!我會試試這個。我會告訴你我的進展情況,看看它是否有效。 – 2010-10-08 12:37:42

+0

它確實適用於一個小小的變化。它需要讀取「event [client_attributes]」,....因爲它是一個嵌套的屬性模型 – 2010-10-08 16:54:17

+0

很高興聽到Nate,我會更新答案供他人蔘考。 – Jeremy 2010-10-10 07:17:37