0

我有一个表单,其中基于用户在下拉列表中选择的值,表单的其余部分通过部分显示。

模型:

Book has many supplierdetails
Supplierdetails belongs to Book

表格代码

<% fields_for @book do |f| %>


 Catalogue Number: <%= f.text_field :BK_CAT_NUM %>

  <% f.fields_for :supplierdetails do |builder| %>
   Supplier Type:
    <%= builder.select(:SUP_TYPE, 
         [['A', 'A'],
          ['B', 'B'],
        ],{ :prompt => "Please select"}       
      ) %>


    <%= observe_field("book_supplierdetails_attributes_0_SUP_TYPE", 
      :url => { :controller => 'books', :action => :display_ab_details },
      :with => "'id='+value") %>

    <div id="div1">  </div>



  <% end %>
<% end %>

控制器方法

  def display_ab_details
    supplier_type = params[:id]
    if supplier_type == "A"
      render :update do |page|
        page['div1'].replace_html :partial => 'books/test_partial'
      end
    end
  end

书籍/_test_partial.html.erb

Production Method: </label> <%= builder.select(:SUP_PROD_METHOD, [
        ['prod_1', 'prod_1'],
        ['prod_2', 'prod_2'],
      ],{ :prompt => "Please select"}
    ) %>

部分没有显示,我相信这是因为表单对象。

如果“books/_test_partial.html.erb”包含纯文本,则会正确显示。

通过 rjs 渲染部分时如何处理表单对象?

4

1 回答 1

1

对于您的问题,我没有实际答案,但是由于自 v3.1 以来 RJS 不再出现在 Rails 中,因此您最好赶上潮流并使用不显眼的 javascript 来处理此类事情,因为它现在是首选的方式做这样的事情。获得帮助也会更容易,因为现在大多数 Rails 开发人员都不使用 RJS(实际上,以前也没有很多人使用它)。

一些信息可以在这里找到:http ://wowkhmer.com/2011/09/19/unobtrusive-ajax-with-rails-31/

此外,您正在做的事情可能不起作用,因为您试图在部分中使用构建器。你不能那样做。您需要使用 fields_for 或简单地自己输出输入 HTML,但请注意为输入提供正确的名称。此外,我很确定如果您查看服务器日志,您会在尝试使用 builder 的那一行看到错误。在 Rails 中绝对没有办法在稍后通过 AJAX 请求呈现的部分中使用原始表单的构建器。

还有一个 Railscasts,Ryan 做了一些类似于你正在做的事情,但他没有使用 RJS。我相信这是这一集或与之相关的东西:http ://railscasts.com/episodes/75-complex-forms-part-3

于 2012-10-31T17:39:59.943 回答