我是 Rails newby,我今天大部分时间都在试图找到我的问题的答案,但我真的无法弄清楚。我认为这是很多人可能正在寻找直截了当的答案的常见问题,所以这里是:
我要做的就是使用一个collection_select 语句,将选定的值存储在@bno 之类的变量中,然后使用同一个变量过滤掉属于建筑物的属性。
这是我的代码:
<%= collection_select :property, :buildingnumber, Building.all, :streetno, :streetno, {prompt: "Building Number"},{:class => "form-control"}%>
据我了解,通过查看 SO,params[:property][:buildingnumber]现在应该保留我的选择。
现在再往下,我有这个代码:
<% @properties.filter_by_building(buildingnumber: Property.find(params[:property][:buildingnumber])).each do |property| %>
<div class="col-sm-6 col-md-4">
<div class="thumbnail relative">
<%= image_tag property.avatar.url(:medium) %>
<div class="caption fixedtextheight">
<h4>Building No: <%= property.buildingnumber%></h4><h4>Property No: <%= property.number%></h4>
<p><h5>Rented: <%=property.rented%></h5></p>
<p>
<a type="button" class="btn btn-default navbar-btn" href=<%= edit_property_path(property) %>>Edit</a> <%= link_to "Delete", property, method: :delete, :class=>"btn btn-default navbar-btn", data: { confirm: "Deleting this property will delete ALL the tenants, expenses, and leases associated to it."} %>
</p>
</div>
</div>
</div>
<%end%>
这是我得到的错误:
属性#index 中的 NoMethodError 显示 /Users//Desktop/JR Buildings/jrbuilding/app/views/properties/index.html.erb 其中第 31 行提出:
用于 nil:NilClass 的未定义方法 `[]' 提取的源代码(在 #31 行附近):
<% @properties.filter_by_building(buildingnumber: Property.find(params[:property][:buildingnumber])).each do |property| %>
我对如何在视图中保存局部变量感到困惑,因为我来自 Java/Obj C 背景,我想做一些非常简单的事情,即根据用户选择的值过滤页面一个collection_select。我还需要弄清楚如何以某种方式更新页面。
无论如何,非常感谢有用的提示,在此先感谢您!
还想在我的属性模型中向您展示我的 filter_by_building 代码:
def self.filter_by_building(opts={})
buildingNo = opts[:buildingnumber]
building = Building.arel_table
self.where(:buildingnumber => buildingNo)
end
非常感谢!