将模型显示为特定属性的列表

时间:2014-03-06 04:35:28

标签: ruby-on-rails ruby-on-rails-4

我有一个联系人模型,其中包含一个属性:area。我想显示一个页面(/ listarea)作为所有区域的列表。我有这部分工作

在contacts_controller.rb

def listarea
    @listarea = Contact.order(:area).uniq.pluck(:area)
    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @contacts }
    end
  end

listarea.html.erb

<table class="table table-striped table-hover"> 
        <% @listarea.each do |area| %>
            <tr class="tablerow">
                <td><%= link_to area, :action => :areacontact, :area => area %></td>
            </tr>
        <% end %>
</table>

我希望能够点击该区域并进入另一个页面(areacontact),该页面将显示该区域中所有联系人的完整列表。这部分不起作用。

在contacts_controller.rb中我有

def areacontacts
    @contacts =  Contact.order(:name).find_all_by_area(params[:area])
    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @contacts }
    end 
  end

在areacontact.html.erb我有

<% @contacts.each do |contact| %>
    Hello
<% end %>

我查看/ isacontact时的错误是

  

ActionView :: Template :: Error(未定义的方法`每个'为nil:NilClass):

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

请勿使用&lt;%= link_to area,:action =&gt; :areacontact,:area =&gt; area%&gt; 而不是使用像areacontact_path这样的路径,使用rake路由检查正确的路径。和 在行 @contacts = Contact.order(:name).find_all_by_area(params [:area])似乎没有属性正确传递请求检查您在操作中获得的参数是什么。

答案 1 :(得分:0)

在您的contacts_controller.rb中,当您在视图中无法显示任何内容时,您需要进行一些调整。我的意思是当你的数据库联系人表是空的时候。

所以你可以在contacts_controller.rb

中这样做
def areacontacts
  @contacts =  Contact.order(:name).find_all_by_area(params[:area]) rescue []
.....
...
end

由于@contacts不是find_all_by_area查询的结果而导致错误。

你也可以在删除@contacts之前检查areacontact.html.erb中的nil:

 <% if @contacts.present  %>

    <% @contacts.each do |contact| %>
        Hello
    <% end %>

 <% end %>