``enter code here<%= form_for(@person) do |f| %>
<% if @person.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@person.errors.count, "error") %> prohibited this person from being saved:</h2>
<ul>
<% @person.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :country_id %><br />
<%= f.collection_select :country_id, Country.all(:order => "name"), :id, :name, :prompt => "-- Select a Country --"%>
<%= observe_field (:person_country_id, :url => {:action => "update_state_div"}, :with => 'person_country_id'%>
</div>
<div class="field">
<%= f.label :state_id %><br />
<%= f.collection_select :state_id, State.all(:order => "name"), :id, :name, :prompt => "-- Select a State --"%>
<%observe_field 'person_country_id', :url => {:action => "update_state_div"}, :with => 'person_country_id'%>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
请注意,observe_field似乎有问题,我期待它做的是当我为国家输入一个值时,该国家的州显示
答案 0 :(得分:3)
看起来你在嵌入Ruby时出错:<% observe_field %>
什么都不插入,而<%= observe_field %>
插入函数的输出。
试试这个:
<%= observe_field 'person_country_id', :url => {:action => "update_state_div"}, :with => 'person_country_id'%>
编辑:
observe_field
是为了补充Prototype,Ruby on Rails 3中的javascript库not included。此问题也解决了这个问题:Observe_field in rails 3。
如果您想使用它,可以通过键入
来安装this pluginrails plugin install git://github.com/rails/prototype_legacy_helper
进入控制台。
这似乎与jQuery不兼容,所以你可能不得不删除jQuery,或编写自己的javascript来做你想做的事。
又一个编辑:
此问题解决了普通JavaScript / jQuery和HTML中的问题:jQuery Chaining Country / State Selects with OptGroup。您应该能够为Ruby on Rails修改它。
答案 1 :(得分:0)
将以下内容添加到您的Gemfile并运行bundle:
gem 'prototype_legacy_helper', '0.0.0', :git => 'git://github.com/rails/prototype_legacy_helper.git'
gem 'prototype-rails'