Ruby on rails Rails 4如何按订单id或订单状态进行搜索
我希望能够通过id或订单状态搜索订单。 我当前的代码正常工作,但不是100% 订单和订单状态模型之间有很多关系。 订单状态模型有四个条目: 1.处理,2.完成,3.取消,4.退款 例如: 我有一个简单的表单来输入订单id,还有一个表单带有select标记 使用所有订单状态按订单状态搜索 如果我搜索订单id 1,我将获得id中带有数字1的所有订单,并且我还将获得订单状态为1的所有订单 我想获得订单id或订单状态的结果 订单模式Ruby on rails Rails 4如何按订单id或订单状态进行搜索,ruby-on-rails,ruby,Ruby On Rails,Ruby,我希望能够通过id或订单状态搜索订单。 我当前的代码正常工作,但不是100% 订单和订单状态模型之间有很多关系。 订单状态模型有四个条目: 1.处理,2.完成,3.取消,4.退款 例如: 我有一个简单的表单来输入订单id,还有一个表单带有select标记 使用所有订单状态按订单状态搜索 如果我搜索订单id 1,我将获得id中带有数字1的所有订单,并且我还将获得订单状态为1的所有订单 我想获得订单id或订单状态的结果 订单模式 class Order < ActiveRecord::Base
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
订单索引视图
<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>
“获取”,类:“执行%>
无,类别:“btn btn主”%>
“获取”,类:“执行%>
无,类别:“btn btn主”%>
订单号
数量
地位
最后更新
管理
|
|
我已经研究了以下链接,但我没有找到或理解解决方案
链接:
您可以通过
order\u id
或order\u status:name
属性和以下内容进行搜索
class Order < ActiveRecord::Base
belongs_to :order_status
def self.search(query)
query.to_s.is_i? ? where(id: query) : joins(:order_status).where('order_statuses.name LIKE ?', "%#{query}%")
end
end
然后创建新的String
扩展文件和is\u i?
方法
# lib/core_extensions/string.rb
class String
def is_i?
/\A[-+]?\d+\z/ === self
end
end
is\u i?
方法的积分您可以通过order\u id
或order\u status:name
属性进行搜索,属性如下
class Order < ActiveRecord::Base
belongs_to :order_status
def self.search(query)
query.to_s.is_i? ? where(id: query) : joins(:order_status).where('order_statuses.name LIKE ?', "%#{query}%")
end
end
然后创建新的String
扩展文件和is\u i?
方法
# lib/core_extensions/string.rb
class String
def is_i?
/\A[-+]?\d+\z/ === self
end
end
is_i?
method无需将id转换为文本,然后使用like进行匹配。这应该足以满足您的需要
class Order < ActiveRecord::Base
belongs_to :order_status
def self.search(search)
where("id = ? OR order_status_id LIKE ? ", search, "%#{search}%")
end
end
类顺序
无需将id转换为文本,然后使用like进行匹配。这应该足以满足您的需要
class Order < ActiveRecord::Base
belongs_to :order_status
def self.search(search)
where("id = ? OR order_status_id LIKE ? ", search, "%#{search}%")
end
end
类顺序
谢谢,我试试看。你能帮我了解一下这个方法吗。搜索方法采用(查询)参数。这可能是什么,也可能是查询、搜索或特定的内容?我有点搞糊涂了。search
方法接受一个参数query
,它是一个字符串,可以包含一个order\u id
或一些处于order\u状态的文本:name
属性。为此,该方法检查查询的格式是否与数字相同'123'
并假设如果是,则它尝试使用订单id
进行搜索;如果不是,且查询更像'foo'
,则它将搜索属于订单状态的订单
,并在:name
列中使用'foo'
一词,谢谢您的解释。我一整天都在为这个挠头。谢谢。我要试试。你能帮我了解一下这个方法吗。搜索方法采用(查询)参数。这可能是什么,也可能是查询、搜索或特定的内容?我有点搞糊涂了。search
方法接受一个参数query
,它是一个字符串,可以包含一个order\u id
或一些处于order\u状态的文本:name
属性。为此,该方法检查查询的格式是否与数字相同'123'
并假设如果是,则它尝试使用订单id
进行搜索;如果不是,且查询更像'foo'
,则它将搜索属于订单状态的订单
,并在:name
列中使用'foo'
一词,谢谢您的解释。我一整天都在为这个挠头。演员阵容在那里是因为它给了我一个使用PG数据库制作的错误。铸造解决了这些问题。谢谢你的帮助。演员阵容在那里是因为在使用PG数据库制作时给了我一个错误。铸造解决了这些问题。谢谢你的帮助。