我希望能夠通過編號或訂單狀態搜索訂單。 我目前的代碼正在工作,但不是100%。Rails 4如何按訂單編號或訂單狀態搜索
訂單和訂單狀態模型之間存在has_many關係。 訂單狀態模型有四個條目: 1.Processing,2.Completed,3.Cancelled,4.Refunded
例子:
我有一個簡單的表格,輸入訂單號,並用另一種形式選擇標籤 包含所有訂單狀態以按訂單狀態進行搜索。
如果我要尋找的順序編號1,我得到的所有訂單的ID號碼1,我也得到所有與訂單狀態訂單1.
我想獲得任何訂單ID的結果或訂單狀態。
訂貨型號
class Order < ActiveRecord::Base
belongs_to :order_status
def self.search(search)
where("cast(id as text) LIKE ? OR order_status_id LIKE ? ", "%#{search}%", "%#{search}%")
end
end
訂單狀態模型
class OrderStatus < ActiveRecord::Base
has_many :orders
end
訂單控制器
def index
@order_statuses = OrderStatus.all
if params[:search]
@orders = Order.search(params[:search])
else
@orders = Order.all
end
end
訂單指數視圖
<div class="row">
<div class="col-sm-6 form-group">
<%= form_tag orders_path, :method => 'get', class:"" do %>
<p>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search", :name => nil, class:"btn btn-primary" %>
</p>
<% end %>
</div>
<div class="col-sm-6 form-group">
<%= form_tag orders_path, :method => 'get', class:"" do %>
<p>
<%= select_tag :search, options_from_collection_for_select(OrderStatus.all, :id, :name, params[:search]) %>
<%= submit_tag "Search", :name => nil, class:"btn btn-primary" %>
</p>
<% end %>
</div>
</div>
<table class="table">
<tr>
<th>Order Id</th>
<th>amount</th>
<th>status</th>
<th>Last Updated</th>
<th>manage</th>
</tr>
<% @orders.each do |order| %>
<tr>
<td><%= order.id %></td>
<td><%= order.total %></td>
<td><%= order.order_status.name %></td>
<td><%= order.updated_at %></td>
<td><%= link_to 'details', order %> |
<%= link_to 'edit', edit_order_path(order) %> |
<%= link_to 'delete', order_path(order), method: :delete, data: { confirm: 'Are you sure?' } %>
</td>
</tr>
<% end %>
<tr><td colspan="4"></td></tr>
</table>
我已經研究了以下鏈接,但我沒有找到或理解的解決方案。
鏈接:
http://railscasts.com/episodes/37-simple-search-form?autoplay=true
http://railscasts.com/episodes/111-advanced-search-form-revised?autoplay=true
http://guides.rubyonrails.org/active_record_querying.html
Build static dropdown menu for simple search Rails 3
謝謝我試試看。你能幫我理解一下這個方法嗎?搜索方法採用(查詢)參數。這可以是任何事情,或需要查詢,搜索或具體的東西?我對此感到困惑。 – Asan
方法'''search'''接受一個參數'''query''',它是一個可以包含'''order_id'''或者一些處於'''order_status:name '''屬性。爲了做到這一點,該方法檢查查詢是否被格式化爲數字「123」,並假定它是否嘗試使用「order_id」進行搜索,如果它不是並且查詢更像這個'''foo'''',然後它搜索屬於''order_statuses''''''foo''''的'''orders'' ''':name'''列 – MilesStanfield
感謝您的解釋。我一整天都在撓頭。 – Asan