Tôi đang cố gắng thực hiện một cái gì đó dường như rất đơn giản, và tôi đã đánh đầu mình chống lại nó trong nhiều ngày tại thời điểm này.Ruby on Rails Quốc gia/Tiểu bang Chọn Enigma
Kết quả cuối cùng mong muốn của tôi là menu thả xuống Chọn quốc gia, được gắn với menu thả xuống chọn trạng thái, theo cách mà khi một quốc gia cụ thể được chọn, NẾU các trạng thái được hiển thị trong một lựa chọn thả và nếu NO được biết đến với quốc gia đó, thì trường văn bản sẽ được hiển thị thay thế.
Tôi cảm thấy mình gần như ở đó. Tại thời điểm này, giao diện sẽ thực sự tạo danh sách các trạng thái dựa trên quốc gia của người đó, ngoại trừ việc từ chối cập nhật thả xuống động.
Các phần của quan điểm của tôi nơi đất nước và tình trạng vị trí được tập hợp trông giống như:
# _person_setup.html.erb
<td>
<%= f.label :country, 'Select your country' %>*<br />
<%= f.select :country, Carmen::country_names, {},
{:style => 'width: 200px',
:id => 'country_select',
:onchange => remote_function(
:url => {:action => 'update_states'},
:with => "'country='+value")} %>
</td><td>
<p>
<div id="states_div">
<%= render :partial => 'states',
:object => Carmen::states(
Carmen::country_code(
@person.country)),
:locals => {:form => f} %>
</div>
</p>
</td>
Các phúc phần tham chiếu trong DIV được như sau:
# _states.html.erb
<% unless states.nil? or states.empty? %>
<%= form.label :state, 'Select your state' %>*<br />
<%= form.select :state, states.collect{|s| [s[0], s[0]]} %>
<% else %>
<%= form.label :state, 'Please enter state or province' %>*<br />
<%= form.text_field :state %>
<% end %>
Cuối cùng, các mã điều khiển mà nhằm cập nhật danh sách các trạng thái động:
def update_states
puts "Attempting to update states..."
q = params[:country]
states = Carmen::states(Carmen::country_code(q))
puts "Country = #{q}, states = #{states.collect{|s| s[0]}.join(", ")}."
render :update do |page|
page.replace_html "states_div",
:partial => 'states',
:object => states,
:locals => {:form => form_for(@person)}
end
puts "OK"
end
Bây giờ , mã này đang được gọi vào đúng thời điểm và tạo danh sách các trạng thái thích hợp. Ví dụ: khi người dùng nhấp vào Úc, "Đang cố gắng cập nhật tiểu bang ... Quốc gia = Úc, tiểu bang = Lãnh thổ Thủ đô Úc, New South Wales, Lãnh thổ phía Bắc, Queensland, Nam Úc, Tasmania, Victoria, Tây Úc" sẽ hiển thị trong quá trình máy chủ. Tuy nhiên nó không cập nhật trang và sẽ không in "OK" ở cuối. Nói tóm lại dòng đó là không chắc chắn là
page.replace_html "states_div",
:partial => 'states',
:object => states,
:locals => {:form => form_for(@person)}
Lưu ý rằng việc thay thế dòng này với
page.replace_html 'states_div', "<b>is it working</b>"
đúng thay thế div, nhưng tất nhiên không phải với bất cứ điều gì hữu ích.
Ai đó có thể giúp tôi hiểu điều gì đang xảy ra ở đây không?
OK, tôi chuyển id vào hàm update_states và tìm kiếm người đó một lần nữa. Nhưng nó vẫn không tự động cập nhật biểu mẫu. Có phải vấn đề mà tôi đang cố tạo biến cho biểu mẫu không? Nói cách khác, là "f = form_form (@object)" hợp lệ trong bộ điều khiển, và bạn có thể chuyển biến này thành một phần không? –
Đó là nghĩa vụ phải là "f = form_for (@object)", tất nhiên. –
Bạn có thực sự nhận lại bất kỳ lỗi nào hoặc trong nhật ký không? Có thể nó không thích form_for trong kết xuất trong update_states. Có thể đáng để thử: "select: person,: state ..." thay vì các công cụ form_for. – Shadwell