【发布时间】:2016-01-26 15:35:32
【问题描述】:
我有一个用于搜索特定模型(订单)的搜索表单。它工作正常,但我想在我的搜索方法中添加一个来自关联(事务)的参数,该参数嵌套如下:[“params”][“transaction_id”]。使用下面的代码,我收到错误ActiveRecord::StatementInvalid in Orders#index 因为我无法以正确的方式表达它。我该如何解决这个问题?
型号:
class Order < ActiveRecord::Base
has_many :transactions, :class_name => "OrderTransaction"
def self.search(params)
query = order('created_at DESC').joins(:transactions)
query = query.where('name LIKE ? OR email LIKE ? OR phone LIKE ? OR address1 LIKE ? OR state LIKE ? OR city LIKE ? OR **params.transaction_id** LIKE ?', "%#{params[:search]}%", "%#{params[:search]}%", "%#{params[:search]}%", "%#{params[:search]}%", "%#{params[:search]}%", "%#{params[:search]}%", "%#{params[:search]}%").order('created_at DESC') if params[:search].present?
query
end
end
控制器:
def index
@orders = Order.search(params)
end
查看:
<%= form_tag orders_path, :method => 'get' do %>
<p>
<%= text_field_tag :search, params[:search],id: "search_text", placeholder: " Search order" %>
<%= submit_tag "Search", :name => nil, class: "btn btn-success", id: "search_but_order" %>
</p>
<% end %>
解决方案 正如@Lanny Bose 建议我的那样,我为我的订单模型创建了一个新列,并将序列化参数的值传递给它。通过这种方式,我现在可以将其添加到我的搜索方法中。
【问题讨论】:
-
您的意思是您正在搜索交易的 id 属性吗?
-
是的,但它在关联模型“事务”中并且是嵌套的。
-
那你想要
transactions.id而不是params.transaction_id -
不是这样嵌套的
#<ActiveRecord::Associations::CollectionProxy [#<OrderTransaction id: 118, order_id: 124, action: "purchase", params: {"transaction_id"=>"5795241933376546"} -
所以你正在序列化参数并将它们存储在数据库中?
标签: ruby-on-rails