私はまだRoRを学んでおり、寝室の数でプロパティをフィルタリングする簡単な検索フィールドを見つけるのに1日かかりました。今は完璧に機能していますが、それが正しい方法かどうかわかりません。バスルーム、最低価格、最高価格、郵便番号などの検索フィールドを追加できるように、それを適応させる方法がわかりません。
検索フィールドと送信ボタンと結果はリストページにあるので、コントローラーには次のようなものがあります。
def list
@properties = Property.bedrooms(params[:bedrooms])
end
私が持っているモデルでは:
def self.bedrooms(bedrooms)
if bedrooms
find(:all, :conditions => ["bedrooms LIKE ?", "%#{bedrooms}%"])
else
find(:all)
end
終わり
list.html.erbページは次のとおりです。
<%= form_tag( 'list', :method => 'get') do %>
<p>
<%= text_field_tag 'bedrooms', (params[:bedrooms]) %>
<%= submit_tag "Search", :name => nil %>
</p>
<% end %>
バスルームの検索フィールド、最低価格の検索フィールド、最高価格の検索フィールド、zipの検索フィールドを追加するにはどうすればよいですか?ありがとう、アダム
これをコントローラーに追加しようとすると、構文エラーが発生します。
scope :bedrooms, {|b| where("bedrooms LIKE ?", b)}
scope :price_greater, {|p| where("price > ?", p)}
エラーは次のとおりです。
SyntaxError in PropertiesController#list
/Users/Adam/Documents/Websites/idx_app/app/models/property.rb:4: syntax error, unexpected '|', expecting '}'
scope :bedrooms, {|b| where("bedrooms LIKE ?", b)}
^
/Users/Adam/Documents/Websites/idx_app/app/models/property.rb:4: syntax error, unexpected '}', expecting keyword_end
scope :bedrooms, {|b| where("bedrooms LIKE ?", b)}
^
/Users/Adam/Documents/Websites/idx_app/app/models/property.rb:5: syntax error, unexpected '|', expecting '}'
scope :price_greater, {|p| where("price > ?", p)}
^
/Users/Adam/Documents/Websites/idx_app/app/models/property.rb:5: syntax error, unexpected '}', expecting keyword_end
はい、ラムダを追加すると上記の構文エラーが修正されましたが、次のエラーメッセージが表示されるため、@propertiesが配列を返さないようになりました。
undefined method `each' for #<Class:0x007fd5235250f8>
Extracted source (around line #29):
26: <th>Price</th>
27:
28: </tr>
29: <% @properties.each do |property| %>
30: <tr>
31:
32: <td><%= link_to(property.address, {:action => 'show', :id => property.id}) %></td>
このエラーメッセージを修正しました。コントローラーで適切に定義していませんでした。@properties=@properties.allの代わりに@properties.allを配置しました。