Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 4如何按订单id或订单状态进行搜索_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails Rails 4如何按订单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

我希望能够通过id或订单状态搜索订单。 我当前的代码正常工作,但不是100%

订单和订单状态模型之间有很多关系。 订单状态模型有四个条目: 1.处理,2.完成,3.取消,4.退款

例如:

我有一个简单的表单来输入订单id,还有一个表单带有select标记 使用所有订单状态按订单状态搜索

如果我搜索订单id 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
订单索引视图

<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数据库制作时给了我一个错误。铸造解决了这些问题。谢谢你的帮助。