行。所以我非常接近。 。 。太沮丧了。请帮忙。以下是两个下拉列表,它们是产品/新页面的一部分
<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 =&gt;各种不同的方式,但它总是只发布localhost:3000 / products / get_subcategories。如果我直接转到URL localhost:3000 / products / get_subcategories / 1,部分渲染就好了。同样,如果我用observehost:3000 / products / get_subcategories / 1替换observe_field中的:url,它可以正常工作(当然不是动态的)。
这是发布的标题:
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=')
})
})
//]]>
答案 0 :(得分:0)
如果您阅读生成的JavaScript,您会看到select simple中的参数不存在。为什么会这样?应该怎么知道?您可以使用options to observe_field
中的:with
键启用它。
<%=
observe_field(
:product_category,
:url => {
:controller => 'products',
:action => 'get_subcategories'
},
:with => 'id',
:update => "subcategory_div"
)
%>
答案 1 :(得分:0)
行。我想出了我的问题,这很愚蠢。我没有包括:with的原因是因为根据文档默认情况下已经发送了观察值。好吧,在查看日志后,我确实添加了:with with in(:with =&gt;“value” )它仍然无法正常工作。但问题出在products_controller的get_subcategories方法中。一旦我将params更改为Subcategory.find_all_by_category_id(params [:value])。sort_by {| k | k ['name']},Doh!瞧,它有效。
对于所有回复此帖和其他人的人,我感谢你提出一个新的Ruby用户,他认为这是一个神秘的Rails语法问题,而不是一个简单的名称更改。