【问题标题】:Passing a form object to a partial rendered from an ajax request将表单对象传递给从 ajax 请求呈现的部分
【发布时间】:2011-04-22 08:21:06
【问题描述】:

我有一个带有一些嵌套属性模型的事件表单。在从选择框中选择客户端后,将呈现附加模型。观察者监视并调用控制器动作,该动作呈现包含 fields_for 嵌套模型的部分。我遇到的问题是我无法将事件“表单”块传递给新呈现的部分 - 至少我不知道如何......

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

【问题讨论】:

  • 一个建议:使用不显眼的 javascript en.wikipedia.org/wiki/Unobtrusive_JavaScript
  • 我愿意做出改变。你能为这种情况提供一个例子吗?我显然在此应用程序中使用原型,因此您可以利用该库。
  • 使用不显眼的 js 在这种情况下没有任何区别。虽然它被认为是最佳实践,但在这里并不相关。我希望这个应用程序不显眼,但由于我继承了别人的代码,我没有这个选择。

标签: ruby-on-rails prototypejs rjs


【解决方案1】:

所以你的主要表单是在一个动作中呈现的,你希望将表单对象从那个视图传递到另一个视图中呈现的第二个部分?这不是您可以做的事情,但是您可以在第二次渲染的部分中修改您的视图代码,以便在不需要现有表单对象的情况下进行渲染,例如:

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

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

我还没有运行此代码来测试它,所以将它生成的 html 与现有部分生成的 html 进行比较,如果它以与主窗体相同的操作呈现。

【讨论】:

  • 好主意!我要试试这个。我会就我的进度回复你,看看它是否有效。
  • 只需稍作改动即可。它需要读取“event[client_attributes]”,....因为它是一个嵌套的属性模型
  • 很高兴听到 Nate,我会更新答案以供其他人参考。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-23
  • 2014-12-23
  • 2023-03-11
  • 1970-01-01
相关资源
最近更新 更多