如何从show视图访问变量

时间:2014-10-02 14:00:50

标签: ruby-on-rails

我在我的视图/ index.html.erb中有这个:

<p>List of all counties</p>

<ul>
  <% @counties.each do |county| %>
      <li><%= link_to "Locations in #{county.name}", generate_county_url_with_prefix(county) %></li>
  <% end %>
</ul>

CountiesController:

class CountiesController < ApplicationController
  before_filter :extract_county_name, :only => [:show_by_name]
   def index
      @counties = County.all

   end

   def show
      @county = County.find(params[:id])

   end 

   def show_by_name
      @county = County.find_by_name(@county_name)
      render :show
   end

   private
   def extract_county_name
     @county_name = params[:county_name_with_prefix].gsub(County::ROUTE_PREFIX,"").gsub("-", " ").strip
   end      
end

一切正常,直到我尝试在县/ show.html.erb内调用@locations。

<ul>
  <% @locations.each do |location| %>
      <li><%= link_to "#{location.name}", generate_location_url_with_prefix(location) %></li>
  <% end %>
</ul>

我知道这是因为它没有在上面的控制器中定义,但是当我确定它时,我得到了错误。如何从这个节目视图中引用@location变量(即意图是显示县内的所有位置 - 在数据库中)?

非常感谢

2 个答案:

答案 0 :(得分:0)

您需要使用要迭代的数据填充Counties控制器上的会话或全局变量。

显示方法(县控制器)

@locations = Location.where("county_id = #{params[:id]}").all

类似的东西。

答案 1 :(得分:0)

我很确定这里的问题是Cloud 9 ide没有正确保存文件,因此创建了一个非常令人困惑的场景(对于新手到rails)。似乎我(或多或少)有正确的代码允许我从县控制器调用@locations(并且数据库列/数据设置是支持的):

class CountiesController < ApplicationController
  before_filter :extract_county_name, :only => [:show_by_name]
   def index
      @counties = County.all
      @locations = Location.all

   end

   def show
      @county = County.find(params[:id])
      @locations = Location.all