0

いくつかのネストされた属性モデルを持つイベント フォームがあります。クライアントが選択ボックスから選択されると、追加のモデルがレンダリングされます。オブザーバーは、fields_for ネストされたモデルを含むパーシャルをレンダリングするコントローラー アクションを監視して呼び出します。私が抱えている問題は、イベント「フォーム」ブロックを新しくレンダリングされたパーシャルに渡すことができないことです-少なくとも方法がわかりません...

以下のコードでは、「引数の数が間違っています (1 に対して 0)」というエラーが発生します。ヘルプや提案をいただければ幸いです。以下で説明するように、このシナリオの例を提供していただければ、目立たない 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 %>
4

1 に答える 1

3

メイン フォームが 1 つのアクションでレンダリングされ、フォーム オブジェクトをそのビューから 2 番目のパーシャルでレンダリングされた別のビューに渡すことを望んでいますか? これは実行できることではありませんが、2 回目にレンダリングされた部分でビュー コードを変更して、既存のフォーム オブジェクトを必要とせずにレンダリングすることができます。たとえば、次のようになります。

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

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

テストのためにこのコードを実行していないので、このコードが生成する html と、メイン フォームと同じアクションでレンダリングされた場合に既存のパーシャルが生成する html を比較してください。

于 2010-10-08T08:36:33.813 に答える