我有一个联系人模型,其中包含一个属性: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):
有人可以帮忙吗?
答案 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 %>