作者dickstar (To you)
看板Ruby
标题Re: [问题] RoR下如何使用select捞资料呢?
时间Thu Mar 11 13:16:26 2010
自已打的问题自已解决
我最後是用Ruby on rails的ProtoTypeHelper做到的
方法如下:
在PC的controller下
新增一个brand anction, 传入品牌id, 回传属该品牌的型号
def brand
# Is this an XmlHttpRequest request?
if (request.xhr?)
@pcs = PC.all(:conditions => ["brand_id = ?", params[:q]])
result = ""
for pc in @pcs
result << "<option value=#{pc.id}>#{pc.name}</option>"
end
render :text => result
else
# No? Then render an action.
render :text => ""
end
end
然後在Order的new, edit的view下
新增
<%
pcs = PC.all(:group => 'brand_id', :order => "name asc")
result =""
for pc in pcs
if @order.pc.brand_id == pc.brand_id
result << "<option value=#{pc.brand_id} selected='selected'>#{pc.brand.name}</option>"
else
result << "<option value=#{pc.brand_id}>#{pc.brand.name}</option>"
end
end
%>
<%= select_tag "brand", result %>
<%= select("sheet", "brand_id", PC.all.sort_by {|a| a.name}.collect {|p| [ p.brand.name + '/' + p.name, p.id ] }, { :include_blank => true }) %>
<%= observe_field :brand, :url => '/pcs/brand',
:frequency => 1,
:update => :order_pc_id,
:with => 'q'
%>
这样就可以用下拉式选单选厂牌, 然後只显示该厂牌相关的电脑.
这边要注意的地方只有一个, observe_field要放在被观察的栏位後面, 不然怎麽试都会没反应
希望我的经验可以帮助到大家
※ 引述《dickstar (To you)》之铭言:
: 环境:
: Ruby 1.8.7 & Rails 2.2.2
: 状况:
: 我在想用form_helper做到一件事, 动态捞资料
: 例如:
: class Brand < ActiveRecord::Base
: has_many :PCs
: end
: class PC < ActiveRecord::Base
: belongs_to :brand
: has_many :orders
: end
: class Order < ActiveRecord::Base
: belongs_to :PC
: end
: 我在Order的Add View里可以使用
: <%= collection_select(:sheet, :PC_id, PC.all, :id, :name, {:include_blank => true}) %>
: 可是资料多的时侯就要翻好几页才找的到资料
: 请问要如何做先选择品牌, 选完之後再选择相关的PC呢?(感觉像是两阶段的select)
: 感谢大大们赐教?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.127.157.91
※ 编辑: dickstar 来自: 59.127.157.91 (03/11 13:17)
※ 编辑: dickstar 来自: 59.127.157.91 (03/11 13:19)