将表单对象传递给从ajax请求呈现的部分对象

时间:2010-10-07 12:24:34

标签: ruby-on-rails prototypejs rjs

我有一个带有一些嵌套属性模型的事件表单。从选择框中选择客户端后,将呈现其他模型。观察者观察并调用控制器动作,该动作呈现包含fields_for嵌套模型的部分。我遇到的问题是我无法将事件'form'块传递给新渲染的部分 - 至少我无法弄清楚如何...

下面的代码引发错误:“错误的参数数量(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 partial

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

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

1 个答案:

答案 0 :(得分: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进行比较,如果它是在与主窗体相同的动作中呈现的。