Rails的3.1不同的视图在一个模型中(Rails 3.1 Different Views for

2019-09-18 07:16发布

我有一个应用程序,我有一个货物模型。 我创建了一个观点,即允许我创建一个基于表的布局的出货量和出货量来看。 一切都在于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     

Answer 1:

依我之见,你就会呈现出两次同样的事情。 你可以通过两种方式解决这个问题:要么你加个参数,并保持相同的控制器操作,或添加新的控制器动作(这可能使您的喜好更清洁的URL --depends)。

首先,定义一个scopeShipment

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会给你同样的结果(无任何变化在必要的路由)。 取决于你的口味。

希望这可以帮助。



Answer 2:

创建控制器称为open_shipments一个新的行动,并呼吁open_shipments.html.erb一个新的视图文件。 添加一个新的途径,以你的路由表,并创建一些视图中的链接,链接的新途径。

在控制器中的操作,从在视图中的那些实例变量访问模型对象到实例变量和显示。

祝好运!



文章来源: Rails 3.1 Different Views for One Model