Динамическое добавление элементов в список выбора в Ruby On Rails с помощью Ajax (снова) - PullRequest
0 голосов
/ 20 августа 2010

OK.Так что я так близко.,,и так расстроен.Пожалуйста помоги.Вот два выпадающих списка, которые являются частью продуктов / новой страницы

<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, частичное отображение будет нормальным.Точно так же, если я заменю: 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=')
  })
})
//]]>

Ответы [ 2 ]

0 голосов
/ 20 августа 2010

OK. Я выяснил свою проблему, и это было глупо. Причина, по которой я не включил: with, состоит в том, что согласно документации по умолчанию было отправлено наблюдаемое значение. Что ж, после просмотра журналов я добавил: with back in (: with => "value") и это все еще не сработало. Но проблема была в методе get_subcategories products_controller. Как только я изменил параметры на Subcategory.find_all_by_category_id (params [: value]). Sort_by {| k | k ['name']}, Дох! и вуаля, это сработало.

Всем, кто откликнулся на этот пост и другим, я благодарю вас за то, что вы согласились с новым пользователем Ruby, который предположил, что это была какая-то загадочная проблема синтаксиса Rails, а не просто изменение имени.

0 голосов
/ 20 августа 2010

Если вы прочитаете полученный JavaScript, вы увидите, что параметр в select просто отсутствует. И с чего бы это? Как это должно знать? Вы получите его с помощью клавиши :with в опциях до observe_field.

<%=
  observe_field(
    :product_category,
    :url => {
      :controller => 'products',
      :action => 'get_subcategories'
    },
    :with => 'id',
    :update => "subcategory_div"
  )
%>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...