我有一个应用程序,我有一个货物模型。 我创建了一个观点,即允许我创建一个基于表的布局的出货量和出货量来看。 一切都在于index.html.erb,因为所有操作都通过Ajax完成。
在创建装运,状态默认为“打开”。 后来当打印提单上,状态将变更为“印有”。
我的目标是创建另一个观点,即仅列出了开放式的出货量允许操作人员打印提货单使用单独的条例草案。 我的问题是如何处理的轨道多种形式和视图渲染为一个模式? 我应该使用单独的控制器/视图来处理与印刷相关的动作/意见,或者我应该用两个模型前。 发货和OpenShipment? 我有一个很难找到的文件,说明这个问题。
下面列出的是我对这个模型的架构,以及当前视图的目录结构。 希望这有助于解释这个问题。
Shipment Model
t.string :item_code
t.string :status
t.string :bill_of_lading
t.integer :qty_shipped
t.datetime :ship_date
t.datetime :delivery_date
查看目录结构
views
shipments
index.html.erb
_shipment.html.erb
_shipment_table.html.erb
_form.html.erb
_edit_form.html.erb
create.js.coffee
edit.js.coffee
update.js.coffee
destroy.js.coffee
依我之见,你就会呈现出两次同样的事情。 你可以通过两种方式解决这个问题:要么你加个参数,并保持相同的控制器操作,或添加新的控制器动作(这可能使您的喜好更清洁的URL --depends)。
首先,定义一个scope
上Shipment
:
class Shipment
scope :open, lambda { where(:status => 'open')
end
这将允许写类似:
Shipment.open
这会给你所有开放的出货量。
所以,你可以如下定义一个新的控制器动作
def open_shipments
@shipments = Shipment.open
render :index
end
这将检索开出货量,并呈现相同的视图索引。
为了使它更清洁,可以使国家在你的URL的参数。 在你config/routes.rb
写
get 'shipments/status/:status', :as => 'shipments#index'
然后你就可以看到编辑您的index
如下行动:
def index
if params[:status]
@shipments = Shipment.where(:status => params[:status])
else
@shipments = Shipment.all
end
end
然后你可以只访问URL shipments/status/open
,这将给开出货量,同样shipments/status/printed
将给所有印刷出货量。
但是URL shipments?status=open
会给你同样的结果(无任何变化在必要的路由)。 取决于你的口味。
希望这可以帮助。
创建控制器称为open_shipments一个新的行动,并呼吁open_shipments.html.erb一个新的视图文件。 添加一个新的途径,以你的路由表,并创建一些视图中的链接,链接的新途径。
在控制器中的操作,从在视图中的那些实例变量访问模型对象到实例变量和显示。
祝好运!