1

我有这样的 index.rabl:

collection @exchangers, :root => "bank", :object_root => false

extends "exchanger_lists/show"

和这样的show.rabl:

object @exchanger
attributes :id, :name, :address, :location_id, :latitude, :longitude, :exchanger_type_id
node(:location_name) {|exchanger_list| exchanger_list.location.name }
node(:exchanger_type_name) {"normal" }
child @currencies do
      attribute :value, :direction_of_exchange_id, :exchanger_list_id
end

我的控制器是这样的:

def index
    @exchangers = ExchangerList.all
  end
 def show
    @exchanger = ExchangerList.find(params[:id])
    @currency_list = CurrencyList.all
    @currencies = []
    @currency_list.each do |c|
      @currencies << CurrencyValue.find(:all, :conditions => {:currency_list_id => c.id, :exchanger_list_id => @exchanger.id}, :order => :updated_at).last(2)
    end
    @currencies.flatten!
  end

如果我在浏览器显示方法中调用,我会看到子 @currencies 和它的数据,但是如果我调用索引,我会看到所有(我也看到节点),但我没有看到子项....怎么了?我做错了什么?

4

1 回答 1

1

您的架构有点混乱,因为在 show 操作中,当您在 index 模板中渲染 show 时,您不仅会显示 nil ,@exchanger而且还会显示完整的 nil 列表。@currencies一般来说,我建议您考虑整个应用程序架构。

当我应该为您当前的问题提供一个简单的解决方案时,我会将 @currencies 代码从 show 操作中提取到 app/helpers/currencies_helper.rb 中的 helper 方法中,并从 show 模板中访问它。

module CurrenciesHelper

  def currencies(exchanger)
    currencies = CurrencyList.all.map do |c|
      CurrencyValue.find(:all, :conditions => {:currency_list_id => c.id, :exchanger_list_id => exchanger.id}, :order => :updated_at).last(2)
    end
    currencies.flatten!
  end

end

顺便说一句,我用这种方法替换了该each方法,map因为它更适合这种情况。

将显示模板中的货币部分更改为

child currencies(@exchanger) do
  attribute :value, :direction_of_exchange_id, :exchanger_list_id
end
于 2013-04-24T12:46:15.027 回答