OK. 그래서 나는 너무 가깝다. . . 그래서 좌절했다. 도와주세요. 여기에 제품의 일부 목록을 아래로 두 개의 드롭/새 페이지가Ajax (다시)를 사용하여 Ruby On Rails의 선택 목록에 항목을 동적으로 추가합니다.
<p>
<%= f.label :category_id %>:
<%= f.select("category", Category.find(:all).collect {|c|[c.name, c.id]})%>
</p>
<%= observe_field :product_category, :url => {:controller => 'products', :action => 'get_subcategories'}, :update => "subcategory_div" %>
Subcategory: <div id="subcategory_div"></div>
이 같은 제품 컨트롤러의 코드를 가지고 :
def get_subcategories
@subcategories = Subcategory.find_all_by_category_id(params[:id]).sort_by{ |k| k['name'] }
render :partial => "subcategories", :locals => {:subcategories => @subcategories}, :layout => false
end
이 부분이다 :
<select id="product_subcategory" name="product[subcategory]">
<% for subcategory in subcategories %>
<option value="<%= subcategory.id %>"><%= subcategory.name %></option>
<% end %>
</select>
첫 번째 드롭 다운을 클릭하면 관측이 시작되지만 매개 변수는 전송되지 않습니다. 추가 시도 : with => 다양한 다른 방법이 있지만 항상 localhost : 3000/products/get_subcategories 만 게시합니다. URL localhost : 3000/products/get_subcategories/1로 직접 이동하면 부분 렌더링이 잘됩니다. 마찬가지로, observe_field의 : url을 localhost : 3000/products/get_subcategories/1로 바꾸면 잘 작동합니다 (물론 동적은 아닙니다).
http://localhost:3000/products/get_subcategories POST /products/get_subcategories HTTP/1.1 Host: localhost:3000 User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 Accept: text/javascript, text/html, application/xml, text/xml, */* Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 115 Connection: keep-alive X-Requested-With: XMLHttpRequest X-Prototype-Version: 1.6.0.3 Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Referer: Content-Length: 69 Cookie: _Customer_Portal_session=BAh7BzoQX2NzcmZfdG9rZW4iMWFmeGFqaXo0T0t3MkJqSG9ONjRDaWpROVdzWDc1K0Jtd1hYZldtcGh5ems9Og9zZXNzaW9uX2lkIiU2M2E3OWNjNDU4NTdhOTQ2ZDgyMGQyOWUyYWM1MGRiOA%3D%3D--c8fc61c71a851b22183015150365b2eb1df0d356 Pragma: no-cache Cache-Control: no-cache 1&authenticity_token=afxajiz4OKw2BjHoN64CijQ9WsX75%2BBmwXXfWmphyzk%3D HTTP/1.1 200 OK Connection: close Date: Thu, 19 Aug 2010 21:20:23 GMT Etag: "0799f242edbcaef2390601b55aaa04c2" Content-Type: text/html; charset=utf-8 X-Runtime: 55 Content-Length: 74 Cache-Control: private, max-age=0, must-revalidate ----------------------------------------------------------
이는 소스의 모습입니다 :
이
는 게시 된 헤더 당신이 결과 자바 스크립트를 읽는다면//<![CDATA[
new Form.Element.EventObserver('product_category', function(element, value) {
new Ajax.Updater('subcategory_div', '/products/get_subcategories',{
asynchronous:true,
evalScripts:true,
parameters:value + '&authenticity_token=' + encodeURIComponent('afxajiz4OKw2BjHoN64CijQ9WsX75+BmwXXfWmphyzk=')
})
})
//]]>