0

我虎視眈眈的第一個國家與應用程序控制器中的全局變量?

@country = Country.find(1) 

然後我我的頭導航我讓這個循環可以得到正確的標籤:

%ul.thumbnails 
- @country.tags.find_each(:conditions => "active_house = true") do |a| 
    %li.span2 
     .thumbnail 
     - a.attachments.limit(1).each do |b| 
      = image_tag(b.file.url) 
     .caption 
      %p 
      #{link_to a.url, tag_country_region_houses_path(@country, a.name), :class => 'btn-nav-drop'} 

這工作得很好。但導航是全球性的,所以我在application_controller創建的方法是這樣的:

helper_method :tags 

def tags 
     @country = Country.find(1) 
     @tags = @country.tags.find_each(:conditions => "active_house = true") 
end 

而且在導航視圖:

%ul.thumbnails 
    - tags do |a| 
     %li.span2 
     .thumbnail 
     - a.attachments.limit(1).each do |b| 
      = image_tag(b.file.url) 
     .caption 
      %p 
      #{link_to a.url, tag_country_houses_path(@country, a.name), :class => 'btn-nav-drop '} 

但我得到一個錯誤消息「沒有塊給出(收益率)」

Thanks..remco

回答

1

那麼,這是沒有關於全局變量,它應儘可能避免。

您的問題是在這條線

tag_country_houses_path(@country, a.name) 

沒有@country存在於查看。

您可能想知道爲什麼。原因是幫手無法將實例變量傳遞給View,與控制器不同。

你的幫手都做了什麼是返回一個數組對象@tags。該對象的值在視圖中可用,但不是實例變量@tags,既不是@country

修復?用一些東西代替@country。如果協會是國家的has_many標籤,你可以做這樣的:

tag_country_houses_path(a.country, a.name) 

如果沒有,你可以在標籤模型設定一個方法來獲得的國家。

而且你甚至可以使用一些includes來提高查詢效率,但這是另一回事。

此外,您的幫手可以被簡化而不分配任何變量。

def tags 
    Country.find(1).find_each(:conditions => "active_house = true") 
end 
0

find_each接受將被屈服的塊。因爲你在沒有該塊的情況下在助手中寫入find_each,所以它會拋出一個錯誤。你有兩個解決方案。

解決方案1:您可以使用find來返回一個數組。

def tags 
    Country.find(1).tags.find(:all, :conditions => "active_house = true") 
end 

在您的視圖:

- tags.each do |t| 
    ......... 

溶液2:您可以將塊傳遞到你的幫手。

def tags 
    Country.find(1).tags.find_each(:conditions => "active_house = true") do |t| 
    yield t 
    end 
end 

在您的看法。

- tags do |t| 
    ......... 

如果您的記錄不多,請使用solution1。

相關問題