我有一个表单,根据用户在下拉列表中选择的值,表单的其余部分通过部分显示。
型号:
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渲染部分时处理表单对象?
答案 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