1

我抓住了第一个国家

 @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 '}

但我收到一条错误消息“没有给出块(产量)”

谢谢..remco

4

2 回答 2

1

好吧,这与全局变量无关,应该尽可能避免。

你的问题在这一行

tag_country_houses_path(@country,  a.name)

视图中不@country存在。

你可能想知道为什么。原因是助手不能将实例变量传递给视图,这与控制器不同。

你的助手所做的就是返回一个数组对象@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 
于 2013-09-01T13:31:20.517 回答
0

find_each接受将要产生的块。因为你在 helper 中写了 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|
  .........

如果您的记录不多,只需使用解决方案1。

于 2013-09-01T14:00:03.447 回答