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

时间:2012-10-31 16:26:58

标签: ruby-on-rails

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

型号:

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渲染部分时处理表单对象?

1 个答案:

答案 0 :(得分:1)

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

有关这方面的一些信息,请访问:http://wowkhmer.com/2011/09/19/unobtrusive-ajax-with-rails-31/

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

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