我用Ryan bates嵌套模型表示它工作正常,但是
我有两个模型,e存储和订单都有嵌套模型称为项目。
存储
has_many :orders
has_many :items, :dependent => :destroy
accepts_nested_attributes_for :items
订单:
belongs_to:storage
has_many :items, :dependent => :destroy
accepts_nested_attributes_for :items
在订单视图中有存储选择框
<%= f.select :storage_id,
Storage.all.map{|s| [s.store_no, s.id]} %>
在选择存储编号时,相应的项目应显示在带有部分
的订单表格中
任何人都能告诉我最好的办法。
谢谢,
答案 0 :(得分:7)
首先,您需要观察输入字段才能看到它已更改。所以,假设:
...您可以将其放在storage.coffee.js
文件中:
jQuery ->
$('select#storage').change ->
storage_id = $('option:selected',this).val()
$.get 'storages/' +storage_id+ '/orders.js'
然后,假设Orders嵌套在存储下,如果OrdersController看起来如此:
OrdersController < ApplicationController
def index
@storage = Storage.find(params[:storage_id])
@orders = @storage.orders
end
end
...如果您有部分app/views/orders/_order.html.erb
...
...如果您的网页上有div#orders
,那么您希望将订单放入...
...那么你应该能够制作一个app/views/orders/index.js.erb
文件:
$('div#orders').html('<%= escape_javascript(render @orders) %>');
这应该为属于给定存储的订单的每个实例呈现部分副本,并在存储选择器之后将其附加到dom。
正在发生的事情是:当选择菜单被更改时,它会向给定存储的订单索引发出js GET请求。然后该请求将自动尝试提供index.js页面,控制器中设置的实例变量可用于该视图。该视图中的js将在插入任何插入的ruby之后执行,因此您可以使用rails函数(如render @orders
),然后通过$('div#orders').html('your rendered orders will be inserted in here by rails')
将这些函数的输出注入到dom中。
显然你必须调整它以适应你的页面,我只是猜测你的页面的哪些元素被调用等,但这个基本概念应该可以正常工作。如果您有任何问题,请告诉我。